makefile - Makefile:模式规则作为第一规则
问题描述
我知道make
如果在没有任何参数的情况下调用它通常会执行第一个目标。但是如果第一个目标是模式规则会发生什么?我这里有一个 Makefile,如下所示:
%.o: %.cc
gcc -c -o $@ $<
main: main.o helper.o
gcc main.o helper.o -o $@
根据我对 的理解make
,在这种情况下,仅在不带任何参数的情况下调用它可能会导致某种错误,因为据我所知,第一个目标始终是默认目标,如果make
没有给出任何参数,则没有任何意义论据。但是当我make
使用这个 Makefile 调用时,它会构建main
目标(当然,递归地构建目标main.o
等等helper.o
)。那么,在寻找第一个目标时会忽略模式规则总是真的吗?make
将那些真正想成为默认目标的人放在目标前面是否被认为是一种不好的风格?在我看来,这有点令人困惑。
解决方案
来自GNU make 手册:
规则的顺序并不重要,除了确定默认目标:make 考虑的目标,如果您没有另外指定一个。默认目标是第一个 makefile 中第一条规则的目标。如果第一条规则有多个目标,则仅将第一个目标作为默认目标。有两个例外:以句点开头的目标不是默认值,除非它还包含一个或多个斜杠“/”;并且,定义模式规则的目标对默认目标没有影响。(请参阅定义和重新定义模式规则。)
推荐阅读
- python - 无法对 DataFrame 中的第一列进行子集化
- php - 如何使用 Phpunit 测试 laravel Mailer
- javascript - 在拖动反应传单时获取当前坐标
- node.js - mongoose 模式中的 validator.isAlpha
- scala - 使用 Gradle jar 获取类未找到错误
- javascript - 如果没有发生替换,javascript字符串替换是否会创建一个新字符串?
- node.js - 为什么在不调试时定义了 process.debugPort?
- flutter - Flutter如何放置嵌套到页面中心
- docker - Kubectl 记录返回 tls 握手超时
- elasticsearch - 弹性搜索:如何搜索以某些字符开头的字符串