xxx-linux-clang: warning: -lc: 'linker' input unused
xxx-linux-clang: warning: -lm: 'linker' input unused
xxx-linux-clang: warning: -Z-reserved-lib-stdc++: 'linker' input unused
xxx-linux-clang: warning: -lpthread: 'linker' input unused
上面的warning 是因为:
LIBS = -lm -lc -lpthread
##-$(CC) $(C_INCLUDE) $(CFLAGS) -I. $(LIBS) -c $< -o $@
应该去掉 $(LIBS)
原因:http://hi.baidu.com/zeyu203/item/d667ff12c7982c2df6625ccb
使用-c是编译成.o的中间文件,这一步只检查语法错误,不检查依赖关系,所以不能加-l,因为既然不检查依赖关系,你给他指明链接文件,岂不多余
但是-l还是要加的,只要在使用.o文件最终链接时加上就可以了,无论依赖关系多么复杂,只要记住一个c一个o,然后把一个文件夹里的o弄到一个链接库a里,最后用所有的o,-l所有的a,链接成为可执行文件
一句话,编译是编译,链接是链接,编译的时候不能链接,链接的时候不要再编译,所以-c与-l两个选项不能同时使用
修改后的 Makefile 段落:
all:$(PRG)
$(PRG): $(NObjs)
-$(CC) $^ -o $@ $(C_INCLUDE) $(LIBS) $(CFLAGS)
-rm -f $^
%.o: %.c
-$(CC) $(C_INCLUDE) $(CFLAGS) -I. -c $< -o $@
%.o: %.cpp
-$(CXX) $(C_INCLUDE) $(CPPFLAGS) -I. -c $< -o $@
%.o: %.cc
-$(CC) $(C_INCLUDE) $(CFLAGS) -I. -c $< -o $@
%.o: %.C
-$(CC) $(C_INCLUDE) $(CFLAGS) -I. -c $< -o $@