【发布时间】:2015-06-25 19:48:44
【问题描述】:
[正如 Cornstalks 在下面解释的那样,我正在尝试去除 #include 中使用的标头前缀。所以看来这个问题不是How to make g++ search for header files in a specific directory?的重复问题]
我正在对库进行一些更改。我在本地有这个库,所以它没有安装在它惯用的系统位置。
我有一个测试源文件,它与库并排。测试文件有很多包括:
#include <foo/libfoo.h>
而且它还有一堆习惯性的包含,比如:
#include <iostream>
我正在尝试使用以下方法编译测试文件:
$ g++ ecies-test.c++ -I. -o ecies-test.exe ./libcryptopp.a
并且(-iquote . 之间的空格似乎没有区别):
$ g++ ecies-test.c++ -I. -iquote . -o ecies-test.exe ./libcryptopp.a
我遇到的问题是我不知道如何告诉 g++ <foo/libfoo.h> 意味着 "./libfoo.h"。实际上,我正在尝试去除用于包含标题的前缀。我查看了2.3 Search Path 下的手册,但它并没有真正讨论这种情况。
我有大约 60 个额外的测试文件用于库。并且每个都有 10 或 20 个这样的包含。所以我无法在 500 或 600 个位置将 #include <foo/libfoo.h> 更改为 #include "./libfoo.h"。
我通过创建虚构的目录结构尝试了@rici 的工作,但它破坏了 GDB 调试。 GDB 找不到类成员的符号,所以我无法设置断点来调试我试图修改的代码。
我如何告诉编译器在 PWD 中查找系统包含?
下面是一个典型的错误。 ECIES_FIPS 在我本地的图书馆副本中。
$ g++ -DNDEBUG=1 -g3 -Os -Wall -Wextra -I. -iquote . ecies-test.c++ -o ecies-test.exe ./libcryptopp.a
ecies-test.c++:29:17: error: no member named 'ECIES_FIPS' in namespace
'CryptoPP'
using CryptoPP::ECIES_FIPS;
~~~~~~~~~~^
ecies-test.c++:44:5: error: use of undeclared identifier 'ECIES_FIPS'
ECIES_FIPS<ECP>::Decryptor decryptor(prng, ASN1::secp256r1());
^
ecies-test.c++:44:16: error: 'ECP' does not refer to a value
ECIES_FIPS<ECP>::Decryptor decryptor(prng, ASN1::secp256r1());
^
/usr/local/include/cryptopp/ecp.h:30:20: note: declared here
class CRYPTOPP_DLL ECP : public AbstractGroup<ECPPoint>
...
如果重要的话:
$ g++ --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin12.6.0
Thread model: posix
【问题讨论】:
-
当前目录(
.)是否命名为foo?如果是这样,您可以将其更改为-I..。或者,您可以将foo符号链接到.。我不知道如何告诉编译器将路径foo/*映射到./*,但这些可能是可行的解决方法。 -
“I”选项应该可以满足您的需求。这是以前的 SO 问题,可能会有所帮助:stackoverflow.com/questions/12654013/…
-
谢谢@Cubia - 我不知道为什么搜索没有发现这个问题。我投了第一次接近重复的投票。
-
@Cornstalks - 我愿意,但我有一个名为
foo的真正库。 -
@jww 是否可以只添加一个名为“foo”的文件夹并将“libfoo.h”文件放入其中?虽然标题前缀仍然存在,但您不必更改任何代码。
标签: c++ g++ include-path