提问者:小点点

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


我一直在学习C++,遇到了以下问题:我有一个目录结构,像:

 - current directory

  - Makefile

  - include

     - header.h

  - src

      - main.cpp

我的头。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;
}

我的生成文件:

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:没有终止此类文件或目录编译。生成文件:10:目标“Main.o”的制作方法失败生成:***[Main.o]错误1

我在这里犯了多大的错误。真让人沮丧。非常感谢您的建议!


共3个答案

匿名用户

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

请执行以下操作:

CFLAGS = -c -Wall -Iinclude

匿名用户

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

gcc -Iinclude/

由于您使用的是makefile,因此可以在生成文件的cflags宏中包含此选项。

CFLAGS = -Iinclude/ -c -Wall

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

匿名用户

可能更改您的包含行:

#include "include/header.h"

假设这是您的头存在的地方--我是从您的makefile中做出这个假设的

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|包含|目录|中|头文件)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?