我有一个看起来像这样的Makefile
CXX = g++ -O2 -Wall
all: code1 code2
code1: code1.cc utilities.cc
$(CXX) $^ -o $@
code2: code2.cc utilities.cc
$(CXX) $^ -o $@
Run Code Online (Sandbox Code Playgroud)
我接下来想要做的就是包含clean target所以每次运行make它都会自动删除现有的二进制文件,code1并code2在创建新文件之前.
我试图将这些行放在makefile的最后,但它不起作用
clean:
rm -f $@
echo Clean done
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法呢?
unw*_*ind 35
最好的事情可能是创建一个包含二进制文件的变量:
binaries=code1 code2
Run Code Online (Sandbox Code Playgroud)
然后在all-target中使用它,以避免重复:
all: clean $(binaries)
Run Code Online (Sandbox Code Playgroud)
现在,你也可以在clean-target中使用它,只需添加一些globs来捕获目标文件和东西:
.PHONY: clean
clean:
rm -f $(binaries) *.o
Run Code Online (Sandbox Code Playgroud)
注意使用.PHONYmake来制作clean一个伪目标.这是一个GNU make功能,因此如果您需要可移植到其他make实现,请不要使用它.