makefile命令行参数(如何给Make命令用来传递参数)
本文目录
如何给Make命令用来传递参数
有时候,我们还是需要让make命令带入一些参数给makefile脚本。
比如,你在代码里面需要定义一个宏DEBUG来打开调试开关,代码如下:int main(){int i=9;#ifdef DEBUGi=1;#elsei=0;#endifprintf("i=%d\n", i);return 0;}一般来说,这个宏定义可以通过直接修改源代码进行,但这样显然不是很好的办法。另外一个办法是通过makefile修改,比如:
CFLAGS=-g -Wall -DDEBUG
object=myprog
all:$objectmyprog:a.c
gcc ${CFLAGS} a.c -o ${object}
如果更进一步,连makefile都不想修改,我们可以通过向make命令传递参数来进行,为此,我们需要适当的修改makefile如下:
CFLAGS=CFLAG
CFLAGS+=-g -Wall -DDEBUG
object=myprog
all:$objectmyprog:a.c
gcc ${CFLAGS} a.c -o ${object}
此时,如果想打开DEBUG宏,我们可以这样输入make命令:
$ make CFLAG=-DDEBUG
gcc -g -Wall -DDEBUG a.c
a.c: In function `main’:
a.c:9: warning: implicit declaration of function `printf’ $
我们可以发现,DEBUG宏已经被正确的传入。
更进一步的,我们可以通过传递不同的参数给make,让make编译不同的模块。
makefile 中,出现$$(M) 是什么意思,我一般$(M)这么用
在makefile中,会经常使用shell命令,也经常见到$var 和 $$var的情况,有什么区别呢,区别大了。不要认为在makefile的规则的命令行中使用$var就是将makefile的变量和shell共享了,这里仅仅是读取makefile的变量然后扩展开,将其值作为参数传给了一个shell命令。而$$var是在访问一个shell命令内定义的变量,而非makefile的变量。此外,如果某规则有n个shell命令行构成,而相互之间没有用’;’和’\’连接起来的话,就是相互之间没有关联的shell命令,相互之间也不能变量共享。看如下例子:makefile代码段1:VAR=3 target: prerequsite1 prerequsite2 echo $VAR (1) VAR=4 (2) echo $VAR (3) echo $$VAR (4) 在代码段1中,(1)的结果是3,显然makefile利用自己的变量将$VAR扩展成3之后传递给这个echo这个shell命令。 (2)中,是一个独立的shell命令自己第一了一个shell变量,名字也叫VAR,且其值为4,不会影响到makefile中的VAR。 (3)中,同(1),makefile中的变量VAR的值依然是3 (4)makefile将$$VAR先执行一次扩展得到如下shell命令: echo $VAR然后交给shell去解释执行,可是对于这个shell命令来说VAR是一个为定义的变量,因此输出的结果就是个空行。makefile代码段2:VAR=3 target: prerequsite1 prerequsite2 echo $VAR;\ (1’) VAR=4;\ (2’) echo $VAR;\ (3’) echo $$VAR (4’) 在代码段2中,所有的shell命令都被连接起来了,那么执行的结果就有变化了: (1’)结果同(1),$VAR被替换成了3 (2’)结果同(2) (3’)输出3,因为虽然shell中有VAR变量,可是makefile先要进行扩展,扩展的结果就是echo 3。 (4’)输出4,因为makefile扩展结果为echo $VAR,而shell中已经有了变量VAR,且其值为4.
makefile能不能接受输入参数
应该叫传入参数或者变量,可以的。
你可以直接在Make的时候,在命令行下面传入一个参数或者变量,它会覆盖掉Makefile里面的变量或者参数。比如,在你的Makefile里面定义了一个变量age.
.PHONY:allAGE = 12all: @echo "age=$(AGE)"
你make的时候,打印信息是age=12
当你使用make AGE=20时,打印的信息就是:age=20,AGE作为参数传入,然后会覆盖掉Makefile里面定义的变量。
更多深入的教程,可以百度:Makefile工程实践
[问题]在makefile中加编译参数-pthread
Ubuntu Github: 4_5_shared_memory 尝试一: 尝试二 直接在命令行中编译时成功的 makefile 同时生成多个可执行文件
更多文章:
nba2k16官方下载正版(NBA2K16下载地址谁能发我一下)
2024年8月13日 00:25
免费用虚拟号码发短信(怎么使用106平台发短信,虚拟手机号码接收短信验证码平台)
2024年5月17日 08:16
方正字体侵权一般赔多少钱(如果方正字体被侵权了,那一般要赔多少钱)
2024年7月22日 07:16
12306分流抢票官网下载(微信12306抢票夜间未开启那个开不开咋回事)
2024年8月28日 23:25
59文学http://www.59too.com怎么加入收藏?59文学怎么打开是白屏~怎么回事有人知道么~
2024年6月25日 09:42
win7自动关机命令(win7自动关机命令是什么 怎么设置)
2024年3月24日 12:15
coreldrawx4手机版(coreldraw x4是什么软件)
2024年9月4日 04:02