该makefile的几个说明: 1)根据项目配置好以下变量:编译器CC,编译选项CFLAGS,链接库LDFLAGS,特殊包含头文件INCLUDES,可执行程序名EXENAME,源码的目标文件OBJECTS。 2)后续用户新增一个源码文件,只需在OBJECTS中,增加一个对应文件名的目标文件即可搞定(如z.cpp, 增加z.o)。 3)dependence中,使用了特殊变量的"%","$<","$@",保证了对应源码文件,能够生成匹配的.o文件。 3. 多个目录、多个源码文件的makefile 实用项目中,多采用分层次目录存放源码。只需在上述makefile中,增加变量VPATH指定子目录,就能搞定。makefile如下所示:
[plain] view plain copy # compile macro CC = g++ CFLAGS = -Wall LDFLAGS = -lm INCLUDES= -I/usr/local/include # user modify: subdir, target and objects VPATH = subdir1 subdir2 EXENAME = test OBJECTS = x.o y.o z.o # make target all:${OBJECTS} ${CC} -o ${EXENAME} *.o ${LDFLAGS} ${INCLUDES} # make clean clean: rm -rf ${EXENAME} ${OBJECTS} # dependence %.o : %.cpp ${CC} ${CFLAGS} ${INCLUDES} -c $< -o $@ %.o : %.cc ${CC} ${CFLAGS} ${INCLUDES} -c $< -o $@该makefile的几个说明: 1)不同目录源码的目标文件,都在OBJECTS中指定;VPATH指定目录。 2)如果多个目录中,有相同名字的源文件,将按照VPATH的路径先后顺序,只编译第1个。必须调整为不冲突的文件名。(切记) 3)所有.o文件,都生成到和makefile同一层次的目录中。 4)项目只有一个makefile,所有目录源码文件的增加删除,都要修改该makefile。(所以推荐在小项目中使用) 4. 多个目录拥有独立的makefile 大中型的实用项目中,多人协作开发,除了分层次目录存放源码,还要考虑源码权限。使用上述的1个makefile,实用性、扩展性,都不能胜任。要使用makefile树管理,每个目录拥有自己的makefile,管控该目录下的编译。 makefile树内容比较多,将在另一篇文章“项目实用makefile”中说明。 参考资料: 1. GNU Make Manual:http://www.gnu.org/software/make/manual/