Types of Prerequisites
如果任何一个依赖文件被更新,则目标相应地也应该被更新。如果只需要依赖某一个文件更新时,来重建目标,不考虑该文件夹下的其他文件,则需要把该依赖写入order-only
依赖;对规则的依赖分类,一类是在这些依赖文件被更新后,需要更新规则的目标;另一类是更新这些依赖的,不需要更新规则的目标。第二类称为:order-only
依赖。书写规则是,order-only
依赖使用管道符号|
开始,作为目标的一个依赖文件。规则依赖列表中管道符号|
左边的是常规依赖,管道符号右边的就是order-only
依赖。书写格式如下:
targets : normal-prerequisites | order-only-prerequisites
正常的依赖条件可以是空的。此外,仍然可以为同一目标声明多行正常依赖条件。注意,如果将同一文件声明为正常依赖和order-only
依赖,则正常依赖条件优先。
OBJS := obj1/main.o obj2/func.o
obj1/%.o : %.cpp
g++ -c -o $@ $<
obj2/%.o : %.cpp
g++ -c -o $@ $<
all: obj1/main.o obj2/func.o
g++ -o main.exe $^
$(OBJS): obj1 | obj2
obj1 obj2:
mkdir $@
clean:
rm -rf obj1 obj2
rm main.exe
run:
main.exe
修改obj1文件夹
一般情况下,在obj1
文件夹下有修改,则会触发整个工程重新编译;
修改obj2文件夹
修改obj2文件夹,没有导致func.o
重新编译,只是重新执行了make all
下的默认命令;