让我们来嚼makefile---make给makefile内部变量赋值

场景:

一般程序都会有两个版本,针对出现问题需要定位的调试的版本和面向用户的发布的版本,这两个版本在代码级别上很大的区别在于是否把#ifdef DEBUG #endif编译进入二进制文件当中,而相对于makefile来说,就是在命令行里面加或者不加-D DEBUG的问题。例子: gcc -g -o main test_macro.c-D DEBUG  这个会把#ifdef和#endif之间的内容编译进去,如果这里面的内容是日志,错误信息的话,方便我们定位问题和解决问题。现在就会有两种方案去编译调试和发布版本, 一种是在makefile里面进行删除-D DEBUG 编译生成发布版本,增加-D DEBUG编译生成调试版本,这样会显得我们开发人员的智商有待提高;更好的一种方法是在makefile内部定义一个变量usedebug=0, 根据变量usedebug的值进行不同的编译命令, 然后再由make 命令在外部进行设置usedebug的值就可以生成不同的编译版本。


解决方案:

cc=gcc
useDebug=0
${warning useDebug ${useDebug}}
main:test_macro.c
ifeq ($(useDebug), 1)
        $(cc) -g -o $@ $^ -D DEBUG
else
        $(cc) -g -o $@ $^
endif
clean:
        rm -rf main

执行命令 make useDebug=1;  make useDebug=0; 就可以执行不同的编译命令,生成不同的版本了。

需要注意的是: make useDebug=1  等号两边不能有空格,否则会报错的。还有一个ifeq else endif控制语句前面都不需要tab键,在一行的开始处写就是,否则也会报错。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值