我的文件夹结构:
--home
|---an_awesome_lib
| |---Core
| |---src
| | |---header_of_lib.h
| |
| |---build
| |---libawesome.so
|
|---framework
|---project
|---my_program_header.h
在 my_program_header.h 我有以下行:
#include <an_awesome_lib/Core/src/header_of_lib.h>
我告诉 g++:
-I</home/an_awesome_lib/Core/src/header_of_ib.h> -lawesome -L/home/an_awesome_lib/build
当我编写#include<home/an_awesome_lib/Core/src/header_of_lib.h>
编译器时不会抛出错误。但我不想这样做。我想要…… 就像#include <an_awesome_lib/Core/src/header_of_lib.h>
这是一个简单的问题,并且经常被问到。但是,我没有看到给 g++ 的路径与代码中 #include 中的路径之间的关系。
我在那里读过,但没有完整的解释将这一切放在一起。
#include <filename> 和 #include "filename" 有什么区别?
https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html
在 C++ 中的 include 语句中使用(相对)路径快捷方式
我希望你有一个笼统的解释,把它放在一个上下文中。以下要点只是一些建议,可以让我更清楚地了解我想知道的内容。
-I
指定包含目录,而不是文件。GCC 文档如下:
-I dir
...
将目录dir添加到预处理时要搜索头文件的目录列表中。
和:
使用预处理指令包含用户和系统头文件
#include
。它有两种变体:
#include <file>
此变体用于系统头文件。它在系统目录的标准列表中搜索名为 file 的文件。您可以使用
-I
选项将目录添加到此列表中。...
如果你想能够写
#include <an_awesome_lib/Core/src/header_of_lib.h>
那么你应该指定/home
为一个包含目录:
-I/home
但是,包括整个home
目录并不是一个好主意。我建议你改变你很棒的库的目录结构。例如,您可以模仿 Boost 并在其中创建an_awesome_lib
目录an_awesome_lib
:
an_awesome_lib
|--- an_awesome_lib
然后使用-I/home/an_awesome_lib
.
或者你可以include/an_awesome_lib
在里面创建an_awesome_lib
:
an_awesome_lib
|--- include
|--- an_awesome_lib
然后使用-I/home/an_awesome_lib/include
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句