makefile并链接不同文件夹中的库

时间:2011-10-06 23:58:56

标签: c++ makefile static-libraries

我在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.

任何帮助或建议将不胜感激!

1 个答案:

答案 0 :(得分:4)

在C ++中,库文件是不够的。编译源代码时不使用它们,但仅在链接时使用。要编译源文件,您需要包含标头。但是编译器需要知道在哪里找到它。尝试将-I utils/inc添加到您的上一行

g++ -c -static $(LINKFLAGS) -o obj/crawler.o -I inc -I utils/inc src/crawler.cpp