我有一个正在运行的项目,我需要在不更改代码的情况下参与其中,而只是为其编写新的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中呢?
您需要在CPPFLAGS
中管理Makefile
。
CPPFLAGS="-I[main_dir]"
并使用以下收据编译应用程序:
g++ $(CPPFLAGS) main.cpp -o main
此外,建议阅读make风格指南以编写好的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
时,它将继续显示标准包含搜索路径的列表,应该找到它。