当我尝试使用 Makefile 构建我的 C++ 项目时遇到了一些问题。然后我发现发生了什么。 例如,有三个文件: main.cc 、bar1 、bar2 、Makefile
main.cc
#include <iostream>
#include "a/a/bar2"
using namespace std;
int main(){
cout<<which()<<endl;
return 0;
}
栏1
#include <iostream>
using namespace std;
cout<<"bar1"<<endl;
酒吧2
#include <iostream>
#include "a/bar1"
using namespace std;
void which(){
cout<<"bar2"<<endl;
}
生成文件
comeon:
g++ -Ia -Ia/a main.C
它们被保存在磁盘上,如下所示:
<Myproject>
|-main.cc
|-Makefile
|-<a>
|-bar1
|-<a>
|-bar2
当我尝试构建这样的项目时:
I:\Myproject\>make
我收到错误:
g++ -Ia -Ia/a main.cc
在 main.cc 包含的文件中:2:0:
a/a/bar2:2:18:致命错误:a/bar1:没有这样的文件或目录
编译终止。
make: * [来吧]错误1
我改变了
#include "a/a/bar2"
到
#include "a/bar1"
在main.cc文件中
添加
#include "a/a/bar2"
在 bar1 文件中
当然删掉
#include "a/bar1"
在 bar2 文件中,并且 执行命令
make
然后我得到以下错误:
在 main.C:2:0: 包含的文件中
a/bar1:2:20:致命错误:a/a/bar2:没有这样的文件或目录
编译终止。
make: * [来吧] 错误 1
将此错误信息与前面提到的另一个错误信息进行比较,我认为编译器实际上可以找到 bar1 和 bar2 文件(编译 bar1 或 bar2 文件时发生错误),但编译器不知何故找不到另一个包含文件编译 main.cc 包含的文件时的文件。
那么,如何解决这个问题呢?谢谢! ^-^
看起来
bar2
中的包含正在寻找bar1
在这里:
<Myproject>
|-main.cc
|-Makefile
|-<a>
|-bar1
|-<a>
|-bar2
|-<a>
|-bar1
如果将
#include "a/bar1"
中的 bar2
更改为 #include "../bar1"
,它将改为在 bar2
的父目录中查找