Makefile当包含的文件包含其他文件时,不会发生此类文件或目录错误

时间:2013-11-24 12:00:07

标签: c++ compiler-construction makefile g++ gnu-make

当我尝试使用 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 所包含的文件时,编译器以某种方式无法找到另一个包含文件。

那么,如何解决这个问题呢?谢谢! ^ - ^

1 个答案:

答案 0 :(得分:0)

bar2中的包含似乎在这里寻找bar1

<Myproject>
|-main.cc
|-Makefile
|-<a>
  |-bar1
  |-<a>
     |-bar2
     |-<a>
        |-bar1

如果您将#include "a/bar1"中的bar2更改为#include "../bar1",则会查找bar2

的父目录