MAKECMDGOALS 变量

make 在执行时会设置一个特殊变量 -- "MAKECMDGOALS" ,该变量记录了命令行参数指定的终极目标列表,没有通过参数指定终极目标时此变量为空。该变量仅限于用在特殊场合(比如判断),在 Makefile 中最好不要对它进行重新定义。

下面通过一个实例来说明此变量的意思,设一 Makefile 内容如下:
  1. ifeq ("$(MAKECMDGOALS)","are you ok cmdgoals")
  2. who="you"
  3. endif
  4. are:
  5.         @echo "are"
  6. you:
  7.         @echo "you"
  8. ok:
  9.         @echo "ok"
  10. cmdgoals:
  11.         @echo "MAKECMDGOALS: $(MAKECMDGOALS)"
  12.         @echo "who are $(who)"

运行输出:
[beyes@SLinux tempa]$ make are you ok cmdgoals
are
you
ok
MAKECMDGOALS: are you ok cmdgoals
who are you

我们在命令行中同时指定了 "are" , "you", "ok", 以及 "cmdgoals" 这 4 个目标。这些目标的名字都会传入 MAKECMDGOALS 中。
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是一个 Makefile 中的条件语句和规则定义。 1. `$(shell umask):$(CURDIR):$(O)`:这里使用了 `shell` 函数来执行 shell 命令 `umask`,获取当前的文件权限掩码。`$(CURDIR)` 是内置变量,表示当前目录的路径。`$(O)` 是一个变量,表示构建目录的路径。将这三个值拼接成一个字符串。 2. `$(REQ_UMASK):$(CANONICAL_CURDIR):$(CANONICAL_O)`:`$(REQ_UMASK)` 是一个变量,表示所需的文件权限掩码。`$(CANONICAL_CURDIR)` 和 `$(CANONICAL_O)` 是其他变量,表示规范化后的当前目录和构建目录的路径。将这三个值拼接成一个字符串。 3. `ifneq ($(shell umask):$(CURDIR):$(O),$(REQ_UMASK):$(CANONICAL_CURDIR):$(CANONICAL_O))`:这个条件语句比较两个拼接后的字符串是否相等。如果不相等,则条件满足。 4. `.PHONY: _all $(MAKECMDGOALS)`:这是一个规则定义,`.PHONY` 声明了伪目标,表示 `_all` 和 `$(MAKECMDGOALS)` 是伪目标(不对应实际的文件),而不是真正的文件或规则。这样,在执行这两个伪目标时,不会检查它们对应的文件是否存在或是否需要更新。 综上所述,这段代码的作用是在特定条件下定义了两个伪目标 `_all` 和 `$(MAKECMDGOALS)`。条件是比较当前的文件权限掩码、当前目录和构建目录与所需的文件权限掩码、规范化后的当前目录和构建目录是否相等。如果不相等,则执行伪目标时不会进行文件存在性检查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值