2019年10月15日 星期二

一版source code要編譯出兩個版本,#ifdef 加上 -D Macro 的用法

假設今天我有一隻code,我想要讓他編譯的時候可以編譯出VER1與VER2的不同結果,以不動到source code為原則,該怎麼作呢?

首先Code必須這樣寫:

=========== source.c =================
#include <stdio.h>
int main()
{
    #ifdef VER1
        printf("This is VER1 !\n");
    #else
        printf("This is VER2 !\n");
    #endif

    return 0;
}
====================================

編譯的時候,如果要編譯出VER1,則必須如下修改:
gcc source.c -o source -D VER1

如果要編譯出VER2,則必須如下修改:
gcc source.c -o source -D VER2











若是這些#ifdef是要改在 Linux Kernel,在source code 加完之後,-D Macro的部分可以直接加在 Linux Kernel的Makefile裡面,請找看看CFLAGS相關的,並且加在CFLAGS上面試試看,編譯後應該可以成功。













另外Makefile加完成之後,編譯時記得要下:
# make VER1=1

這樣子編譯才會跑到VER1定義的地方