Makefile中使用override实现插入额外编译选项或宏定义功能

第一版实现(会覆盖原有编译选项)

Makefile内容

CFLAGS := $(CFLAGS) -O3
test: main.c
	gcc $(CFLAGS) -o $@ $^

测试输出

  1. 执行命令make输出
    gcc  -O3 -o test main.c
    
  2. 执行命令make CFLAGS="-Wall -Werror -DTEST_MACRO"输出
    gcc -Wall -Werror -DTEST_MACRO -o test main.c
    
  • 可以发现在外部指定的变量CFLAGS覆盖了内部的CFLAGS变量
  • 当然,此时可以在外部把内部的编译选项也加上:make CFLAGS=“-Wall -Werror -DTEST_MACRO -O3”

override命令测试

Makefile内容

# 被注释的CFLAGS赋值, 是因为执行make命令时报错

# CFLAGS1  = $(CFLAGS1) -O3
CFLAGS2 := $(CFLAGS2) -O3
# CFLAGS3 += $(CFLAGS3) -O3
# CFLAGS4 ?= $(CFLAGS4) -O3
override CFLAGS5  = -O3
override CFLAGS6 := -O3
override CFLAGS7 += -O3
override CFLAGS8 ?= -O3
# override CFLAGS9   = $(CFLAGS9)  -O3
override CFLAGS10 := $(CFLAGS10) -O3
# override CFLAGS11 += $(CFLAGS11) -O3
# override CFLAGS12 ?= $(CFLAGS12) -O3

all: test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 test11 test12

test1: main.c
	gcc $(CFLAGS1) -o $@ $^
test2: main.c
	gcc $(CFLAGS2) -o $@ $^
test3: main.c
	gcc $(CFLAGS3) -o $@ $^
test4: main.c
	gcc $(CFLAGS4) -o $@ $^
test5: main.c
	gcc $(CFLAGS5) -o $@ $^
test6: main.c
	gcc $(CFLAGS6) -o $@ $^
test7: main.c
	gcc $(CFLAGS7) -o $@ $^
test8: main.c
	gcc $(CFLAGS8) -o $@ $^
test9: main.c
	gcc $(CFLAGS9) -o $@ $^
test10: main.c
	gcc $(CFLAGS10) -o $@ $^
test11: main.c
	gcc $(CFLAGS11) -o $@ $^
test12: main.c
	gcc $(CFLAGS12) -o $@ $^

clean:
	rm test* -f

测试输出

  1. 执行make命令输出
    gcc  -o test1 main.c
    gcc  -O3 -o test2 main.c
    gcc  -o test3 main.c
    gcc  -o test4 main.c
    gcc -O3 -o test5 main.c
    gcc -O3 -o test6 main.c
    gcc -O3 -o test7 main.c
    gcc -O3 -o test8 main.c
    gcc  -o test9 main.c
    gcc  -O3 -o test10 main.c
    gcc  -o test11 main.c
    gcc  -o test12 main.c
    
  2. 执行make CFLAGS1=-DTEST CFLAGS2=-DTEST CFLAGS3=-DTEST CFLAGS4=-DTEST CFLAGS5=-DTEST CFLAGS6=-DTEST CFLAGS7=-DTEST CFLAGS8=-DTEST CFLAGS9=-DTEST CFLAGS10=-DTEST CFLAGS11=-DTEST CFLAGS12=-DTEST命令输出
    gcc -DTEST -o test1 main.c
    gcc -DTEST -o test2 main.c
    gcc -DTEST -o test3 main.c
    gcc -DTEST -o test4 main.c
    gcc -O3 -o test5 main.c
    gcc -O3 -o test6 main.c
    gcc -DTEST -O3 -o test7 main.c
    gcc -DTEST -o test8 main.c
    gcc -DTEST -o test9 main.c
    gcc -DTEST -O3 -o test10 main.c
    gcc -DTEST -o test11 main.c
    gcc -DTEST -o test12 main.c
    

测试结论

可以发现编译test7和test10时-DTEST和-O3同时存在,也就是说如下两种方式可以达到目的:

override CFLAGS7 += -O3
override CFLAGS10 := $(CFLAGS10) -O3

第二版实现(不覆盖原有编译选项)

实现一

override CFLAGS := $(CFLAGS) -O3
test: main.c
	gcc $(CFLAGS) -o $@ $^

实现二

override CFLAGS += -O3
test: main.c
	gcc $(CFLAGS) -o $@ $^

参考文档

https://www.gnu.org/software/make/manual/make.html#Override-Directive

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值