从Makefile覆盖宏常量

时间:2017-01-03 06:39:36

标签: c++ c makefile macros

是否可以使用Makefile中的其他值覆盖宏?

假设我有一个文件a.c和一个Makefile

a.c文件中,我将宏声明为#define DEBUG 1。 我想传递值以将Makefile替换为CCFLAGS += -D DEBUG -Dvar=1。但是,如果我这样做,我会收到重新定义警告,该值会保留a.c中使用的值。

这可能吗?还有,这是不好的做法吗?

2 个答案:

答案 0 :(得分:3)

您需要修改自己的宏定义:

<iframe width="100%"
	height="300px"
	allowfullscreen
	frameborder="0"
	src="//storage.googleapis.com/vrview/index.html?image=//storage.googleapis.com/vrview/examples/coral.jpg&
	is_stereo=true">
</iframe>

或者只是完全删除定义,并始终传递构建系统中的值。

答案 1 :(得分:2)

  

这可能吗?

通过-DFOO=bar之类的标志不可能,因为命令行中的宏定义之前源代码文件中的那些,因此将被覆盖(重新定义)。

但是,如果您打算通过编译器标志控制宏值,您可能会发现ifndef指令很有用。例如:

[pengyu@GLaDOS-Precision-7510 tmp]$ cat a.c 
#ifndef TEST
#  define TEST 1
#endif

TEST
[pengyu@GLaDOS-Precision-7510 tmp]$ cpp a.c
# 1 "a.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "a.c"




1
[pengyu@GLaDOS-Precision-7510 tmp]$ cpp a.c -DTEST=2
# 1 "a.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "a.c"




2