例如,目标文件obj.o需要依赖obj.h和obj.cpp,如果obj.h发生改变,但是其他文件都没变,目标文件也没有被删除,此时重新执行make,不会重新编译。 要达到.h文件改变,直接make就可以重新编译,即:自动增量编译,需要添加到依赖文件列表。 改动如下:
main:main.o obj.o g++ -o $@ $^ main.o: g++ -c main.cppobj.o:obj.cpp obj.h g++ -c obj.cpp -o $@g++编译命令,链接库在目标文件之后,否则导致链接库无效,编译报链接库中函数未定义的错误。(gcc暂未测试)
INCLUDE = -I.INCLUDE += -I/usr/local/include/FDFLAGS = -Wl,-BstaticFDFLAGS += /usr/local/lib/liblog4cpp.aFDFLAGS += -Wl,-BdynamicFDFLAGS += -L/usr/local/libFDFLAGS += -L/usr/lib64 -lpthreadg++ $(INCLUDE) -o test $(objs) $(FDFLAGS)即:-o test 需要在 $(FDFLAGS) 之前. 放在之前则会报错,如下:
参考文章:
Makefile 连接静态库注意事项多个文件目录下Makefile的写法 linux下g++ 编译时动态库和静态库的链接和头文件问题 g++ 链接静态库命令应该放在最后gcc/g++ 静态动态库 混链接.新闻热点
疑难解答