C++ makefile 与相对包含父级的路径
C++ makefile with relative include path to parent
我有一个工作项目,我需要在不更改代码的情况下从中提取部分内容,只需为其编写新的 main() 即可。
我的目录结构:
[main_dir]/[main.cpp]
[main_dir]/[dir1]/[child1]/file1.h
[main_dir]/[dir2]/[child2]/file2.h
在 main.cpp 我有:包括 "dir1/child1/file1.h"
在 file1.h 我有:包括 "dir2/child2/file2.h"
我正在编译:
g++ 主 main.cpp
我得到 "dir2/child2/file2.h" 没有这样的文件或目录。
我无法将 file1 更改为:include "../../dir2/child2/file2.h"
以某种方式在原始项目中的 makefile 中搜索所有相对于 [main_dir] 的包含路径,以便可以找到来自 file1.h 的包含。
我应该在 makefile 中添加什么才能做到这一点?
您需要在 Makefile
中管理 CPPFLAGS
。
CPPFLAGS="-I[main_dir]"
然后像这样用收据编译应用程序:
g++ $(CPPFLAGS) main.cpp -o main
另外建议阅读制作风格指南以写出好的风格指南Makefile
。您可以在那里找到有关包含文件夹声明的提示。
使用双引号来包含头文件时,如
#include "dir2/child2/file2.h"
那么编译器会使用current文件的目录来查找头文件
如果您的 file1.h
中有它,那么编译器将查找头文件 [main_dir]/dir1/child1/dir2/child2/file2.h
。这是不正确的。
您可以通过告诉编译器将 [main_dir]
添加到标准包含搜索路径列表来解决它。这是通过 -I
(大写 i)选项完成的:
g++ -I [main_dir] main.cpp
然后当编译器在第一次搜索中找不到 dir2/child2/file2.h
时,它将继续使用标准包含搜索路径列表,并且应该找到它。
我有一个工作项目,我需要在不更改代码的情况下从中提取部分内容,只需为其编写新的 main() 即可。 我的目录结构:
[main_dir]/[main.cpp]
[main_dir]/[dir1]/[child1]/file1.h
[main_dir]/[dir2]/[child2]/file2.h
在 main.cpp 我有:包括 "dir1/child1/file1.h"
在 file1.h 我有:包括 "dir2/child2/file2.h"
我正在编译: g++ 主 main.cpp
我得到 "dir2/child2/file2.h" 没有这样的文件或目录。 我无法将 file1 更改为:include "../../dir2/child2/file2.h"
以某种方式在原始项目中的 makefile 中搜索所有相对于 [main_dir] 的包含路径,以便可以找到来自 file1.h 的包含。
我应该在 makefile 中添加什么才能做到这一点?
您需要在 Makefile
中管理 CPPFLAGS
。
CPPFLAGS="-I[main_dir]"
然后像这样用收据编译应用程序:
g++ $(CPPFLAGS) main.cpp -o main
另外建议阅读制作风格指南以写出好的风格指南Makefile
。您可以在那里找到有关包含文件夹声明的提示。
使用双引号来包含头文件时,如
#include "dir2/child2/file2.h"
那么编译器会使用current文件的目录来查找头文件
如果您的 file1.h
中有它,那么编译器将查找头文件 [main_dir]/dir1/child1/dir2/child2/file2.h
。这是不正确的。
您可以通过告诉编译器将 [main_dir]
添加到标准包含搜索路径列表来解决它。这是通过 -I
(大写 i)选项完成的:
g++ -I [main_dir] main.cpp
然后当编译器在第一次搜索中找不到 dir2/child2/file2.h
时,它将继续使用标准包含搜索路径列表,并且应该找到它。