Windows上vs开发惯了,突然迁移到linux下开发,Makefile得自己写,所以做下笔记。
target: prerequisites ...
command
...
...
target
可以为对象文件,二进制文件,也可以为一个标签。
prerequisites
为依赖,二进制文件依赖对象文件列表、静态库,对象文件的话,除了依赖(源码),还有要执行的编译对应源码的命令。
LIBOBJECTS = $(LIB_SOURCES:.cc=.o)
将LIB_SOURCES
的文件列表替换扩展名:
1.cc 2.cc 3.cc -> 1.o 2.o 3.o
选取所有符合统配规则的文件,然后用空格隔开:
$(wildcard ./*.cc) -> ./1.cc ./2.cc
可以使用统配来让所有符合的一些后缀名的自动生成规则:
%.o: %.cc
gcc $(CXXFLAGS) -c $< -o $@
其中$<
表示的是第一个依赖,而$@
表示的是目标,也就是所有的xxx.o都会自动执行为:
xxx.o: xxx.cc
gcc $(CXXFLAGS) -c xxx.cc -o xxx.o