在c的不同目录中包含头文件

新手上路,请多包涵

我一直在学习 c++ 并遇到以下问题:我有一个目录结构,如:

  - current directory

  - Makefile

  - include

     - header.h

  - src

      - main.cpp

我的 header.h :

 #include <iostream>

using namespace std;

void print_hello();

我的 main.cpp:

 #include "header.h"

int main(int argc, char const *argv[])
{
    print_hello();
    return 0;
}

void print_hello()
{
    cout<<"hello world"<<endl;
}

我的Makefile:

 CC = g++
OBJ = main.o
HEADER = include/header.h
CFLAGS = -c -Wall

hello: $(OBJ)
    $(CC) $(OBJ) -o $@

main.o: src/main.cpp $(HEADER)
    $(CC) $(CFLAGS) $< -o $@

clean:
    rm -rf *o hello

make 的输出是:

g++ -c -Wall src/main.cpp -o main.o src/main.cpp:1:20:致命错误:header.h:没有此类文件或目录编译终止。 Makefile:10:目标“main.o”的配方失败 make:*** [main.o] 错误 1

我在这里犯了什么错误。这令人沮丧。非常感谢任何建议!

原文由 J. Lin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 408
2 个回答

您告诉 Makefile 必须存在 include/header.h ,并且您告诉 C++ 源文件它需要 header.h …但您没有告诉编译器这些头文件所在的位置(即在“包括”目录)。

做这个:

 CFLAGS = -c -Wall -Iinclude

原文由 Lightness Races in Orbit 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以在命令行中添加一个 -I 选项来告诉编译器在那里查找头文件。如果您在 include/ 目录中有头文件,那么此命令应该适合您。

 gcc -Iinclude/

由于您使用的是 makefile ,因此您可以在您的 makefile 中的 CFLAGS 宏中包含此选项。

 CFLAGS = -Iinclude/ -c -Wall

或者

您可以使用 #include "../include/header.h" 包含头文件。

原文由 abhiarora 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题