makefile - 为什么在配方中使用 $(MAKE) 制作“--dry-run”会导致错误?
问题描述
当我继续make --dry-run
奔跑
all:
false # $(MAKE)
使用 GNU Make 4.2.1,我得到以下错误。为什么?
false # make all
make: *** [Makefile:2: all] Error 1
解决方案
https://www.gnu.org/software/make/manual/make.html#Instead-of-Execution:
、
-n
和选项不影响以字符开头-t
或包含字符串或.-q
+
$(MAKE)
${MAKE}
(--dry-run
是 的别名-n
。)
https://www.gnu.org/software/make/manual/make.html#MAKE-Variable:
subsystem: cd subdir && $(MAKE)
[...]
作为一项特殊功能,
MAKE
在规则的配方中使用变量会改变-t
(--touch
)、-n
(--just-print
) 或-q
(--question
) 选项的效果。使用变量与在配方行开头MAKE
使用字符具有相同的效果。+
[...]
考虑
make -t
上面示例中的命令。(该-t
选项将目标标记为最新而不实际运行任何配方;请参阅代替执行。)按照通常的定义-t
,示例中的make -t
命令将创建一个名为子系统的文件,并且不执行任何其他操作。你真正想要它做的是运行cd subdir && make -t
;但这需要执行配方,并-t
说不执行配方。这个特殊的功能使它做你想做的事:只要规则的配方行包含变量
MAKE
,标志-t
,-n
并且-q
不适用于该行。MAKE
尽管存在导致大多数配方不运行的标志,但包含的配方行仍会正常执行。
您的配方包含$(MAKE)
,因此尽管--dry-run
. false
返回退出状态 1,这被视为错误make
。
推荐阅读
- vba - 不应执行代码时无效使用 null 错误
- python-3.x - python subprocess.run() 超时选项无法杀死 MS Access 应用程序
- android - 在 Android 中使用自签名证书时出现 SSLPeerUnverifiedException
- javascript - 为什么我的 ngModal 值在我的 html 选择中得到一个字符串值而不是布尔值 true 或 false?
- php - 如何在选择“显示类别”的 Woocommerce 商店页面中显示每个类别的 ID
- cmake - 在 CLion 中,如何设置 CMakeLists.txt 选项值?
- python - 是否可以在创建 DataFrame 之前进行类似 dropna 的操作?
- kubernetes - 根据 http 请求计数自动缩放 Pod
- python - OpenCV 视频写入会大幅降低 FPS。如何优化性能?
- javascript - 为什么在 JavaScript 中添加对象文字 + 数组文字会导致 0?