我在StackOverflow上搜索了一下并尝试了一些建议,但至今没有解决问题。
我正在为学校项目制作一个makefile,作为我项目的一部分,我正在生成一个静态库并链接它。当编译器到达静态库中的头包含时,会抛出错误。该代码仅为#include "StringUtil.h"
所以在makefile中我有这些相关的代码部分
LINKFLAGS=-Llib/ -lHTMLtools
bin : lib $(BIN_FILE)
lib : $(LIB_OBJ_FILES)
ar r lib/libHTMLtools.a $(LIB_OBJ_FILES)
$(BIN_FILE) : $(OBJ_FILES) #This is only obj/crawler.o for now
g++ -o bin/crawler obj/crawler.o
obj/crawler.o : src/crawler.cpp inc/crawler.h
g++ -c -static $(LINKFLAGS) -o obj/crawler.o -I inc src/crawler.cpp
所以每当我运行make bin
命令时,它会按预期生成lib.libHTMLtools.a
但是当它到达时
g++ -c -static $(LINKFLAGS) -o obj/crawler.o -I inc src/crawler.cpp
它返回此错误。
src/crawler.cpp:2:24: fatal error: StringUtil.h: No such file or directory compilation terminated.
任何帮助或建议将不胜感激!
答案 0 :(得分:4)
在C ++中,库文件是不够的。编译源代码时不使用它们,但仅在链接时使用。要编译源文件,您需要包含标头。但是编译器需要知道在哪里找到它。尝试将-I utils/inc
添加到您的上一行
g++ -c -static $(LINKFLAGS) -o obj/crawler.o -I inc -I utils/inc src/crawler.cpp