2013/11/11

[Linux] 用CFLAGS -D來定義Makefile中global變數

在Linux編譯的時候,常常會需要讓程式去辨認一些變數,像是目前版本、或者自己定義的一些功能項目,所以.c檔會需要從Makefile那邊得到一些變數來做判斷。

利用CFLAGS -D來定義巨集變數,經過編譯之後,就可以在.c檔案中使用此定義巨集來做判斷。

# Makefile
CC = gcc
RM = rm

CFLAGS += -DTest

TARGETS := myapp

$(TARGETS): main.c
 $(CC) $(CFLAGS) $< -o $@

clean:
 -$(RM) -f *.o
 -$(RM) -f $(TARGETS)

$@:指的是編譯的目標檔,也就是$(TARGETS)的myapp
$<:指的是目前的相依檔,也就是$(TARGETS)後面的main.c,意思是若要編譯$(TARGETS),則必須先把main.c編譯




// main.c
#include <stdio.h>

int main()
{

#ifdef Test
printf("Hello Global variable Test\n");
#else
printf("Sorry no Global variable Test.\n");
#endif

return 0;
}

執行myapp結果如下所示:


當然除了定義變數之外,也可以指定變數值,Test=5來作為判斷條件

#Makefile
CC = gcc
RM = rm

CFLAGS += -D Test=5

TARGETS := myapp

$(TARGETS): main.c
 $(CC) $(CFLAGS) $< -o $@

clean:
 -$(RM) -f *.o
 -$(RM) -f $(TARGETS)

//main.c
#include <stdio.h>

int main()
{

#if Test==5
printf("Hello Global variable Test,%d?\n",Test);
#else
printf("Sorry no Global variable Test,%d.\n",Test);
#endif

return 0;
}

結果如下所示


沒有留言:

張貼留言