C++;相对于父级包含路径的makefile

C++;相对于父级包含路径的makefile,makefile,g++,Makefile,G++,我有一个正在工作的项目,我需要在不改变代码的情况下从中提取部分,然后为它编写新的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/

我有一个正在工作的项目,我需要在不改变代码的情况下从中提取部分,然后为它编写新的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”没有这样的文件或目录。 我无法将文件1更改为包含“../../dir2/child2/file2.h”

不知何故,在原始项目中,makefile中的某个部分搜索相对于[main_dir]的所有include路径,这样就可以找到file1.h中的include


我应该向makefile中添加什么才能完成它呢?

您需要在
makefile
中管理
CPPFLAGS

CPPFLAGS="-I[main_dir]"
并用收据编写申请,如下所示:

g++ $(CPPFLAGS) main.cpp -o main

此外,建议阅读make样式指南,以编写一个好的
Makefile
。您可以参考以下关于包含文件夹声明的提示。

您需要在
Makefile
中管理
CPPFLAGS

CPPFLAGS="-I[main_dir]"
并用收据编写申请,如下所示:

g++ $(CPPFLAGS) main.cpp -o main

此外,建议阅读make样式指南,以编写一个好的
Makefile
。当使用双引号包含头文件时,您可以遇到以下有关包含文件夹声明的提示。

,如中所示

#include "dir2/child2/file2.h"
然后编译器将使用当前文件的目录来搜索头文件

如果您的
文件1.h
中有它,那么编译器将查找头文件
[main\u dir]/dir1/child1/dir2/child2/file2.h
。这是不对的

您可以通过告诉编译器将
[main\u dir]
添加到标准include搜索路径列表中来解决此问题。这是通过
-I
(大写字母I)选项完成的:


然后,当编译器在第一次搜索中未能找到
dir2/child2/file2.h
时,它将继续使用标准include搜索路径列表,并且应该找到它。

当使用双引号包含头文件时,如中所示

#include "dir2/child2/file2.h"
然后编译器将使用当前文件的目录来搜索头文件

如果您的
文件1.h
中有它,那么编译器将查找头文件
[main\u dir]/dir1/child1/dir2/child2/file2.h
。这是不对的

您可以通过告诉编译器将
[main\u dir]
添加到标准include搜索路径列表中来解决此问题。这是通过
-I
(大写字母I)选项完成的:


然后,当编译器在第一次搜索中未能找到
dir2/child2/file2.h
时,它将继续使用标准include搜索路径列表,并且应该找到它。

g++-o-l main.cpp
看起来不正确。首先,
-o
选项需要在其后面直接输入输出文件的名称。其次,
-l
选项是什么?是小写字母L,还是大写字母i?经过编辑,它们现在可能都不需要
g++-o-L main.cpp
看起来不正确。首先,
-o
选项需要在其后面直接输入输出文件的名称。其次,
-l
选项是什么?是小写字母L还是大写字母i?经过编辑,这两个字母现在可能都不需要了