makefile变量定义应用到c语言
makefile是为组织程序工程的,其定义的宏怎样应用到c程序中呢?
我们知道Makefile中可定义变量或导出变量,make命令可定义变量;编译器(如gcc)可通过CFLAGS定义宏。
但如何才能使Makefile或make命令用变量控制C程序呢?
C程序可以接收编译器定义的宏,通过-D指定。makefile中将make命令或makefile中变量通过编译器-D参数传递到C程序是关键。
宏定义使用前缀-D,在编译过程中可以把宏定义追加到CFLAG中。宏定义有两种相似的写法 【第一种】-D DEFINES 【第二种】-D DEFINES=CONDITION
注:可以在C语言中直接使用宏定义,如同C文件开始#define定义一样,但要注意变量定义格式(字符串要用引号)。
如判断SOC是TI则C程序执行特殊动作(SOC_TI),流程如下:
1. make命令执行时,定义SOC=TI。
make SOC=TI
2. makefile中判断SOC变量。
ifeq ( "$SOC", "TI") 或
ifeq ( "$(SOC)", "TI")
SOC_FLAG = -DSOC_TI
endif
3. CFLAGS增加宏
CFLAGS += $(SOC_FLAG)
foo:foo.o bar.o
cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)
4. 在C程序中增加宏判断
#ifdef SOC_TI
todo...
#endif
通过上述过程SOC=TI变量定义就传导到C程序中。
参考: