makefile的执行逻辑是:
目标依赖于依赖文件,当依赖文件不存在时,make会去寻找其它规则创建依赖文件;当依赖文件比目标文件更新时,这条规则会被执行。
makefile依赖关系中的竖线 |
经常会在makefile中看到类似这样的依赖关系:
$(BUILD_DIR)/%.o: %.c | $(BUILD_DIR)
告诉make,仅仅关心$(BUILD_DIR)是否存在,而不关注最后修改时间
这是什么意思呢?
这个意思是:
目标的生成依赖于.c 文件和 $(BUILD_DIR)目录的存在,但是并不关心 $(BUILD_DIR)目录的修改时间。即便$(BUILD_DIR)目录的最后修改时间比目标文件更新,但是该条规则也不执行,只有 .c文件比目标文件更新时才会执行。
原因如下: 因为目标文件 %.o 保存在 $(BUILD_DIR) 目录下,因此当目标文件更新时,意味着$(BUILD_DIR)目录的修改时间也更新了。如果没有那个短竖线,那么make命令认为目标依赖的.c虽然没有修改,但是$(BUILD_DIR)修改了,因此每次都会重新执行该条规则,这显然是我们不希望看到的,因此加上一条竖线 |,告诉make,仅仅关心$(BUILD_DIR)是否存在,而不关注最后修改时间。

3471

被折叠的 条评论
为什么被折叠?



