1、给代码传入宏定义开关。转自:
比如,你在代码里面需要定义一个宏DEBUG来打开调试开关,代码如下:
点击(此处)折叠或打开
-
int main()
-
{
-
int i=9;
-
-
#ifdef DEBUG
-
i=1;
-
#else
-
i=0;
-
#endif
-
printf("i=%d\n", i);
-
-
return 0;
-
}
一般来说,这个宏定义可以通过直接修改源文件进行,如在xxx.h或main.c中直接增加#define DEBUG。但这样显然不是很好的办法。另外一个办法是通过makefile修改,比如:
-
CFLAGS=-g -Wall -DDEBUG
-
object=myprog
-
all:$object
-
myprog:a.c
-
gcc ${CFLAGS} a.c -o ${object}
如果更进一步,连makefile都不想修改,我们可以通过向make命令传递参数来进行,为此,我们需要适当的修改makefile如下:
-
CFLAGS=CFLAG
-
CFLAGS+=-g -Wall
-
object=myprog
-
all:$object
-
myprog:a.c
-
gcc ${CFLAGS} a.c -o ${object}
此时,如果想打开DEBUG宏,我们可以这样输入make命令:
注意:
gcc中的-D的理解:gcc提供了另外一种宏定义的方法。
2、给Makefile传递参数。转自:
Makefile 传入参数的方式
2.1、一种
Makefile中:
-
ifdef AAA
-
CFLAGS = -Wall -c -DAAA
-
endif
2.2、另外一种
Makefile中:
2.3、还有一种
Makefile中:
-
TT_FLAG = FLAG
-
TT_FLAG +=其他参数
注意:如果把2.3这样写:
Makefile中:
会出现什么样的结果,实测是:编译阶段TT_FLAG的值是make带进来的值。
另外,还遇到过一种方式也会替换掉“子”Makefile中的FLAG变量的值
子Makefile中:
父Makefile中:
结果是,编译阶段CFLAG的值是make -C带进来的参数2。
3、小结。转自:
gcc编译选项
-Dmacro
相当于C语言中的#define macro
-Dmacro=defn
相当于C语言中的#define macro=defn
-Umacro
相当于C语言中的#undef macro
-undef
取消对任何非标准宏的定义
阅读(15703) | 评论(0) | 转发(0) |