makefile - 目标位置如何影响 makefile 的行为
问题描述
我写了一个简单的 Makefile 如下:
.PHONY: all A B
A:
@echo "in target A"
B:
@echo "in target B"
all: A B
输出是
in target A
但如果我修改 Makefile 如下:
.PHONY: all A B
all: A B
A:
@echo "in target A"
B:
@echo "in target B"
输出变成
in target A
in target B
我应该更仔细地阅读 Makefile 手册的哪一部分以了解其中的区别?
解决方案
我应该更仔细地阅读 Makefile 手册的哪一部分以了解其中的区别?
要研究手册的哪一部分取决于make
您正在阅读的手册,但对您观察到的行为的解释很简单:当您在make
没有指定要构建make
的目标的情况下运行时,构建默认目标,这是 makefile 中出现的第一个目标其名称不包含句点 ('.') 后跟大写字母。
特别是,目标名称“all”对make
. 它的使用只是一个普遍的约定,并且要使all
目标按您期望的方式工作(即,使其成为默认目标),它必须位于 makefile 中的第一个位置。有些 makefile 有一个“全部”目标,故意将其放置在其他地方,以便默认设置不同的目标。当它不是默认值时,您仍然可以显式构建它,当然,通过在命令行上命名它:make all
.
推荐阅读
- asp.net - targetFramework-Attribute... 更高版本 4
- asp.net-core-2.1 - .net core 2.1 基于声明的身份验证
- xml - 基于元素值(包括子实体)组合 XML 消息
- haskell - haskell - 无法将类型“(Char,Int)”与“[Char]”错误匹配
- java - 如何在 Spring Data jpa 上修复我的存储库创建
- ruby - 如何从 Sinatra 配置 Thin Web 服务器?
- vuejs2 - Vue cli 3 - 纽约伊斯坦布尔代码报告不包括 vue 文件
- python - python - 前6个元素:做循环然后取下6个元素,重复
- matrix - 连接可变结构的数组
- php - AWS:如何将 EC2 的 IAM 角色配置为 Web 服务器