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

时间:2016-07-02 16:13:27

标签: c++ makefile

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

 - current directory

  - Makefile

  - include

     - header.h

  - src

      - main.cpp

my header.h:

#include <iostream> 

using namespace std;

void print_hello();

my 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

我在这里犯了什么错误。这令人沮丧。真的很感激任何建议!

3 个答案:

答案 0 :(得分:10)

你告诉Makefile include/header.h必须存在,你告诉C ++源文件它需要header.h ...但是你没有告诉编译器这些头文件在哪里(即“包含” “目录)。

这样做:

CFLAGS = -c -Wall -Iinclude

答案 1 :(得分:1)

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

gcc -Iinclude/

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

CFLAGS = -Iinclude/ -c -Wall

OR

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

答案 2 :(得分:0)

也许更改您的包含行:

#include "include/header.h"

假设你的标题存在 - 我正在从你的makefile中做出这个假设