如何在Linux kernel Makefile中添加宏定義:
CFLAGS_object.o += -DMACRO_NAME
在編譯object.o時定義宏MACRO_NAME,在kernel中添加自己的模塊時比較有用。
另外,要想對所以將編譯的文件都添加一個宏的定義,可以使用
EXTRA_CFLAGS += -DMY_DEBUG
這樣就可以在MY_DEBUG的控制下添加自己的調試信息了。
當使用如下Makefile后警告就沒了,說明宏開關起作用了,
Makefile如下:
+++++++++++++++++++++++++++++++++++++++++++
TARGET=test
MYDEF=-DXXX_X__
obj += test.o
test:$(obj)
gcc -o $@ $^ $(MYDEF)
cleanup:
rm -rf *.o $(TARGET)
+++++++++++++++++++++++++++++++++++++++++++
主要是Makefile中-DXXX_X__的作用。
在gcc編譯器中, -E是宏替換階段。同時又制定了-D參數時,會將-D 參數后的字符串最為宏名定義在指定的文件。例如:
-DXXX_X__ <==========> -D XXX_X__ <======> #define XXX_X__ 1
-D XXX_X__=strings < ========= > -DXXX_X__=strings <=========> #define XXX_X__ strings
在一些特別的場合需要把Makefile中定義的變量作為C源代碼的初始值.
比如__DATE__宏是C已經預定義的宏,但有時候不喜歡該宏的日期格式,那么可以自己做一個。
舉例如下:
Makefile內容如下:
=================================================
STR_A="Hello!"
STR_B=$(
shell
date --rfc-3339=date)
all:
gcc
-DSTR_INFO=\"$(STR_A)\"
-DSTR_DATE=\"$(STR_B)\" -o test main.c
----------------------------------------------------------------------------------------------------------
main.c 內容如下:
==================================================================
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
const char info[]=
STR_INFO; // 這里的宏定義來自Makefile
const char data[]=
STR_DATE; // 這里的宏定義來自Makefile
void main(void)
{
printf("%s\n", info);
printf("%s\n", date);
}
