当我尝试使用 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;
}
BAR1
#include <iostream>
using namespace std;
cout<<"bar1"<<endl;
BAR2
#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: * [comeon]错误1
我改变了
#include "a/a/bar2"
到
#include "a/bar1"
<.c>在main.cc文件中
添加
#include "a/a/bar2"
bar1文件中的
当然,删除
#include "a/bar1"
在bar2文件中,和 执行命令
make
然后我得到了以下错误:
在main.C中包含的文件中:2:0:
a / bar1:2:20:致命错误:a / a / bar2:没有这样的文件或目录
编译终止。
make: * [comeon]错误1
将此错误信息与前面提到的另一个错误信息进行比较,我认为编译器实际上可以找到bar1和bar2文件(编译 bar1 或 bar2 文件时发生错误) ,但在编译 main.cc 所包含的文件时,编译器以某种方式无法找到另一个包含文件。
那么,如何解决这个问题呢?谢谢! ^ - ^
答案 0 :(得分:0)
bar2
中的包含似乎在这里寻找bar1
:
<Myproject>
|-main.cc
|-Makefile
|-<a>
|-bar1
|-<a>
|-bar2
|-<a>
|-bar1
如果您将#include "a/bar1"
中的bar2
更改为#include "../bar1"
,则会查找bar2