我想在 Makefile 中执行一个命令,将结果存储到一个变量中并稍后重用该结果。
在 BSD Makefile 中,我可以使用 != 运算符:
PASSWORD != openssl rand -base64 48
Run Code Online (Sandbox Code Playgroud)
在 GNU Makefile 中,我可以使用 shell 函数:
PASSWORD := $(shell openssl rand -base64 48)
Run Code Online (Sandbox Code Playgroud)
有没有办法以与两个 make 兼容的方式编写它?
预期输出
在这两种情况下,命令的结果都分配给 PASSWORD,因此我可以在 Makefile 中重用相同的 PASSWORD 值:
quux:
@echo $(PASSWORD)
@echo $(PASSWORD)
Run Code Online (Sandbox Code Playgroud)
如果我运行make quux,这将输出两次相同的密码。
例如:
$ gmake quux
Y0ZrQQqLF9JK98x9UiIwWwcCN2Cq1wNqzph3ShG1RK0NeqbxWn6p4XB5zgHvfnbY
Y0ZrQQqLF9JK98x9UiIwWwcCN2Cq1wNqzph3ShG1RK0NeqbxWn6p4XB5zgHvfnbY
Run Code Online (Sandbox Code Playgroud)
这与使用反引号运算符不同。在这种情况下,兼容两个make,每次都会运行命令。
在 GNU make 4.0 中,!=为了兼容性添加了 BSD 操作符。对于在此之前的 GNU make 版本,您很不走运。您将不得不使用“穷人的”方法,这是一个递归的 make 调用。
要非常小心,因为 BSD 操作符和 GNU make$(shell ...)函数的语义略有不同。在您的特定情况下,您不会注意到任何差异,因为 shell 命令的输出不包含任何变量引用(没有$)。
| 归档时间: |
|
| 查看次数: |
1015 次 |
| 最近记录: |