我一直在学习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
我在这里犯了多大的错误。真让人沮丧。非常感谢您的建议!
您告诉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中做出这个假设的