1. 程式人生 > >Makefile中用巨集定義進行條件編譯(gcc -D)/在Makefile中進行巨集定義-D

Makefile中用巨集定義進行條件編譯(gcc -D)/在Makefile中進行巨集定義-D

在原始碼裡面如果這樣是定義的:
#ifdef   MACRONAME
//可選程式碼
#endif

那在makefile裡面
gcc   -D   MACRONAME=MACRODEF
或者
gcc   -D   MACRONAME 


這樣就定義了預處理巨集,編譯的時候可選程式碼就會被編譯進去了。

對於GCC編譯器,有如下選項:
        -D macro=string,等價於在標頭檔案中定義:#define   macro   string。例如:-D TRUE=true,等價於:#define   TRUE   true
        -D macro,等價於在標頭檔案中定義:#define   macro   1,實際上也達到了定義:#define   macro的目的。例如:-D LINUX,等價於:#define   LINUX   1(與#define   LINUX作用類似)。
        --define-macro   macro=string與-D macro=string作用相同。

如:

TEST.C 檔案

#include <stdio.h>
#include <stdlib.h>

main()
{
#ifdef p1
  printf("Hello p1");
#else
  printf("Hello p2");
#endif
 
}

1.

編譯: gcc -o test test.c

執行: ./test

輸出: Hello p2

2.

編譯: gcc -o test test.c -D p1

執行: ./test

輸出: Hello p1