是否可以使用Makefile中的其他值覆盖宏?
假设我有一个文件a.c
和一个Makefile
。
在a.c
文件中,我将宏声明为#define DEBUG 1
。
我想传递值以将Makefile
替换为CCFLAGS += -D DEBUG -Dvar=1
。但是,如果我这样做,我会收到重新定义警告,该值会保留a.c
中使用的值。
这可能吗?还有,这是不好的做法吗?
答案 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