[C ++ makefile带有相对于父项的相对包含路径

问题描述 投票:0回答:1

我有一个正在运行的项目,我需要在不更改代码的情况下参与其中,而只是为其编写新的main()。我的目录结构:

[main_dir] / [main.cpp]

[main_dir] / [dir1] / [child1] /file1.h

[main_dir] / [dir2] / [child2] /file2.h

在main.cpp中,我具有:include“ dir1 / child1 / file1.h”

在file1.h中,我具有:include“ dir2 / child2 / file2.h”

我正在编译:g ++ main main.cpp

我得到“ dir2 / child2 / file2.h”,没有这样的文件或目录。我无法将file1更改为:包括“ ../../ dir2 / child2 / file2.h”

以某种方式,在原始项目中,makefile文件中的某些内容将搜索相对于[main_dir]的所有包含路径,以便可以找到来自file1.h的包含。

我还应该添加什么到makefile中呢?

makefile g++
1个回答
0
投票

您需要在CPPFLAGS中管理Makefile

CPPFLAGS="-I[main_dir]"

并使用以下收据编译应用程序:

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

此外,建议阅读make风格指南以编写好的Makefile。您可以在那里找到有关包含文件夹声明的提示。


0
投票

当使用双引号包括头文件时,如>]

#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时,它将继续显示标准包含搜索路径的列表,应该找到它。

© www.soinside.com 2019 - 2024. All rights reserved.