Makefile指定依赖忽略自动规则:如何让p5不触发*.py默认规则?
解决方法:阻止Make为p5.py触发模式规则
有几种可靠的方式可以实现你的需求,你可以根据实际场景选择:
1. 为p5.py添加空的明确规则
如果p5.py是已经存在的文件,或者你不需要Make帮你构建它,直接给它写一个空规则。Make会优先使用明确规则而非模式规则,这样就不会触发%.py的构建逻辑:
# 明确声明p5.py的规则,什么都不做(@#是静默注释,避免Make输出冗余信息) p5.py: @# 空命令,标记p5.py无需构建
保留你原有的规则(顺便修正了原规则里的依赖笔误,${SRCDIR}/$^会展开成无效路径,建议明确指定依赖文件):
p5: p5.py ${SRCDIR}/p5.py # 这里添加p5目标的执行命令,比如spark-submit调用逻辑 %.py: clean spark-submit ${SRCDIR}/$@ ${SPARK_OPTS} # 原有%.py模式规则的构建命令
当你运行make p5时,Make会直接使用这个空规则处理p5.py,不会触发模式规则。
2. 将p5.py标记为伪目标(适合非实际文件场景)
如果p5.py并不是一个实际存在的文件,只是作为依赖标记使用,可以把它声明为伪目标。伪目标的特点是Make不会检查对应文件的存在性,也不会尝试用模式规则构建它:
.PHONY: p5 p5.py p5: p5.py ${SRCDIR}/p5.py # p5的执行命令 %.py: clean spark-submit ${SRCDIR}/$@ ${SPARK_OPTS} # 原有模式规则命令
这样Make会直接跳过p5.py的构建步骤,不会触发%.py规则。
3. 临时禁用模式规则(单次调用)
如果你只是偶尔需要运行p5而不触发%.py规则,可以在调用Make时加上-r选项,关闭所有内置模式规则(注意:这会同时关闭Make的其他内置规则,比如C语言编译规则等):
make -r p5
这个方法适合一次性需求,不需要修改Makefile。
内容的提问来源于stack exchange,提问作者Rorschach
相关产品推荐
相关产品推荐

