我正在制作模拟器并编写了大量文件和标题。 问题是每当我包含一个文件时,我都会给出特定文件的相对路径。 例如,我的应用程序中的典型代码就像是一样
#ifndef AI_H #define AI_H #include #include "../world/world.h" #include "pathPlan.h" #include "skills/tryskill.h" #include "../info/condition.h" #include "dataStructures/destination.h" #include "../params/gamePlay.h" #include "../modules/controlModule.h" class ai { public: etc etc
我想避免使用相对路径。 例如,我想直接包含“tryskill.h”和“destination.h”而不给出绝对路径。 这样,如果我改变任何特定文件的位置,我不需要打扰。 我正在使用Ubuntu 9.10。 任何帮助将受到高度赞赏。
真的,这一切都取决于你的包含路径,不同的编译器可能会称之为不同的东西,但在gcc中
-Idir Append directory dir to the list of directories searched for include files.
因此,在您的示例中,您将在-I
中的目录列表中指定../world etc...
通常,如果您从命令行进行编译,则会向编译器提供包含搜索路径(gcc示例: http : //gcc.gnu.org/onlinedocs/cpp/Search-Path.html )。 如果您使用的是IDE,则应该能够为IDE指定包含搜索路径,IDE将把这些路径传递给您的编译器。
编译器将允许您在命令行(或响应/配置文件)上指定搜索头文件的目录。 如果您使用其中一种工具驱动构建,通常可以在makefile或IDE的项目设置中进行配置。
但是,一般来说,我更喜欢指定“属于”项目的标题的相对路径(而不是可能跨项目使用的库)。 这样,当您添加新模块时,您不必使用项目设置或制作文件来继续构建。
如果您希望将模块的标头与模块的实现保持在一起,而不是将标头堆积到单个(或一小组)目录中。 任何一个组织都可以说是另一个组织。
您应该使用与程序/库的顶级包含路径相关的路径。 有很多不同的方法可以做到这一点,具体取决于您构建程序的方式。 如果您正在使用CMake构建系统 – 我强烈建议您使用它 – 那么您将使用INCLUDE_DIRECTORIES
命令:
INCLUDE_DIRECTORIES(包括)
如果您的“info / condition.h”文件位于“include / blah / info / condition.h”中,那么您可以将其包含在:
#include
如果使用g ++从命令行进行编译,则可以使用-I
命令行开关:
g ++ file1.cpp file2.cpp ... fileN.cpp -I./include
如果您正在使用Make,则可以通过添加以下行来确保使用此标志:
CPPFLAGS + = -I./include
另一种可能性,虽然我不建议,是定义环境变量CPATH
:
#注意以下是您在BASH中的操作: export CPATH =“$ CPATH”:“`pwd` / include”
思考的食物:替代品是什么?
#include "pathPlan.h" #include "exception.h" #include "world.h" #include "exception.h" // uh ?
我总是担心在include paths变量中声明的路径太多,问题是路径越多,你就越有可能得到文件名冲突,而且调试真的很烦人。
我更喜欢这个:
// 3rd party libraries #include <3rdParty1/foo.h> #include <3rdParty2/foo.h> // Projects I depend on #include "myProject1/bar.h" // Current project, from the include directory #include "currentProject/foobar.h" #include "currentProject/another.h" // Current project, from the source directory (private includes) #include "../world.h" #include "../detail/helper.h"
对于给定项目“thingy”,这意味着我有以下文件:
// in thingy/1-3-0-2/include/thingy/foo.h namespace thingy // base namespace is project name // namespace hierarchy identical to folders hierarchy { }
然后我在编译行上有以下内容:
-I${Repository}/thingy/1-3-0-2/include
当然这是一个更多的打字,但它有助于保持一切整洁:
任何好的IDE或makefile都允许您列出文件的相对搜索路径。 请查看此解决方案。
以上就是c/c++开发分享如何避免在C或C ++ #include指令中明确声明目录路径?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/559620.html