Makefile為源文件提供宏定義


如何在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);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM