Makefile(或者shell)的變數通過gcc的-D巨集定義選項傳遞給C原始檔
阿新 • • 發佈:2019-01-29
當make巢狀呼叫時,上層Makefile中定義的變數會以系統環境變數的方式傳遞到下層的Makefile中。這裡的系統環境變數與本makefile中定義的變數的關係有點類似於全域性變數與區域性變數的關係。預設情況下,只有通過命令列設定的變數會被傳遞。而定義在檔案中的變數,如果要向下層Makefile傳遞,則需要使用exprot關鍵字來宣告。
------------------------------------------我是分割線------------------------------------------------------
在一些特別的場合需要把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);
}
------------------------------------------我是分割線------------------------------------------------------
在一些特別的場合需要把Makefile中定義的變數作為C原始碼的初始值. 比如__DATE__巨集是C已經預定義的巨集,但有時候不喜歡該巨集的日期格式,那麼可以自己做一個。 舉例如下: Makefile內容如下: ================================================= STR_A="Hello!" STR_B=$(shell