我可以将变量作为命令行参数传递给GNUMakefile吗?换句话说,我想传递一些参数,这些参数最终将成为Makefile中的变量。
当前回答
似乎命令args覆盖了环境变量。
生成文件:
send:
echo $(MESSAGE1) $(MESSAGE2)
示例运行:
$ MESSAGE1=YES MESSAGE2=NG make send MESSAGE2=OK
echo YES OK
YES OK
其他回答
最简单的方法是:
make foo=bar target
然后在makefile中可以引用$(foo)。注意,这不会自动传播到子制作。
如果您正在使用子制造,请参阅本文:向子制造传递变量
假设你有一个这样的makefile:
action:
echo argument is $(argument)
然后你可以称之为make action argument=something
根据手册:
make中的变量可以来自运行make的环境。make启动时看到的每个环境变量都被转换为具有相同名称和值的make变量。但是,makefile中的显式赋值或带有命令参数的赋值会覆盖环境。
所以你可以(从bash):
FOOBAR=1 make
在Makefile中生成变量FOOBAR。
您有几个选项可以从makefile外部设置变量:
从环境-每个环境变量都被转换为具有相同名称和值的makefile变量。您可能还想将-e选项(又名--environments override)设置为,并且您的环境变量将覆盖makefile中的赋值(除非这些赋值本身使用override指令。但是,不建议这样做,使用?=assignment(条件变量赋值运算符,它仅在尚未定义变量时有效)会更好更灵活:FOO=环境中的默认值if_not_set_请注意,某些变量不是从环境继承的:MAKE来自脚本的名称SHELL要么在makefile中设置,要么默认为/bin/sh(基本原理:命令是在makefile内指定的,它们是特定于SHELL的)。从命令行-make可以将变量赋值作为其命令行的一部分,并与目标混合:使目标FOO=bar但是,除非在赋值中使用override指令,否则将忽略makefile中对FOO变量的所有赋值。(效果与环境变量的-e选项相同)。从父Make导出-如果从Makefile调用Make,通常不应显式地编写如下变量赋值:#不要这样做!目标:$(MAKE)-C目标CC=$(CC)CFLAGS=$(CFLAGS)相反,更好的解决方案可能是导出这些变量。导出一个变量会使其进入每个shell调用的环境中,从这些命令发出的Make调用会如上所述选择这些环境变量。#像这样做CFLAGS=-g导出CFLAGS目标:$(MAKE)-C目标也可以使用不带参数的导出导出所有变量。
似乎命令args覆盖了环境变量。
生成文件:
send:
echo $(MESSAGE1) $(MESSAGE2)
示例运行:
$ MESSAGE1=YES MESSAGE2=NG make send MESSAGE2=OK
echo YES OK
YES OK
推荐文章
- 如何强制makefile重新构建目标?
- 在Unix中,我可以在一个目录中运行'make'而不首先cd'到该目录吗?
- 如何通过docker运行传递参数到Shell脚本
- @, -和+作为Make中食谱行前缀的作用是什么?
- 在makefile中抑制命令调用的回声?
- 解析命令行参数的最佳方法?
- 如何“使”应用程序知道默认目标构建,如果没有目标指定?
- 如何在Makefile目标中使用Bash语法?
- 在规则执行时定义make变量
- 如何在Makefile中编写循环?
- 如何在命令行中将变量传递给ansible playbook ?
- 什么是makeinfo,如何获取它?
- 如何获得您的Makefile的当前相对目录?
- 如何从命令行禁用Maven Javadoc插件?
- 如何获得makefile中的目标列表?