用环境变量控制c/c++的条件编译

from:http://blog.csdn.net/hejinjing_tom_com/article/details/7949304

用环境变量控制c/c++的条件编译

author:hjjdebug
date: 2012-09-06
--------------------------------------------------------------------------------
环境变量能影响什么?
甲. 环境变量不能直接影响c/c++ 代码中的条件编译
看下面例子:
a. 书写代码
gitserver@gitserver-desktop:~/share/hjj/ctest$ cat hello.cpp

    #include <stdio.h>
    int main(int argc, char *argv[])
    {
    #ifdef _TESTMACRO
        printf("_TESTMACRO has defined\n");
    #else
        printf("_TESTMACRO not defined\n");
    #endif
        return 0;
    }

 代码中的宏定义, 要用#define 或 gcc 传入-D参数定义, 环境变量影响不了.


b. 测试环境变量_TESTMACRO 未定义时
    gitserver@gitserver-desktop:~/share/hjj/ctest$ echo $_TESTMACRO
    gitserver@gitserver-desktop:~/share/hjj/ctest$ gcc hello.cpp -o hello
    gitserver@gitserver-desktop:~/share/hjj/ctest$ ./hello
    _TESTMACRO not defined

c. 测试环境变量_TESTMACRO 定义时
    gitserver@gitserver-desktop:~/share/hjj/ctest$ export _TESTMACRO=1
    gitserver@gitserver-desktop:~/share/hjj/ctest$ echo $_TESTMACRO      
    1
    gitserver@gitserver-desktop:~/share/hjj/ctest$ gcc hello.cpp -o hello
    gitserver@gitserver-desktop:~/share/hjj/ctest$ ./hello
    _TESTMACRO not defined

d. 要想影响条件编译,需要在编译选项中定义宏。如下演示。
    gitserver@gitserver-desktop:~/share/hjj/ctest$ gcc hello.cpp -o hello -D_TESTMACRO
    gitserver@gitserver-desktop:~/share/hjj/ctest$ ./hello
    _TESTMACRO has defined



乙. 环境变量能影响Makefile 中的条件执行
演示如下:
a. 书写测试Makefile 代码
    gitserver@gitserver-desktop:~/share/hjj/ctest$ cat Makefile
    SRC=hello.cpp
    COMPILE=gcc
    OUT=hello
    ifdef _TESTMACRO

    $(warning "_TESTMACRO defined")

     CFLAG += /D _TESTMACRO

    else

    $(warning "_TESTMACRO not defined")

     endif

    all:
        $(COMPILE)  $(CFLAG) $(SRC) -o $(OUT)

b. 演示测试。
    gitserver@gitserver-desktop:~/share/hjj/ctest$ echo $_TESTMACRO
    1
    gitserver@gitserver-desktop:~/share/hjj/ctest$ make
    Makefile:5: "_TESTMACRO defined"
    gcc /D_TESTMACRO hello.cpp -o hello
    gitserver@gitserver-desktop:~/share/hjj/ctest$ unset _TESTMACRO
    gitserver@gitserver-desktop:~/share/hjj/ctest$ echo $_TESTMACRO

    gitserver@gitserver-desktop:~/share/hjj/ctest$ make
    Makefile:7: "_TESTMACRO not defined"
    gcc hello.cpp -o hello

小结: 有时候,需要编写条件编译代码,例如用来适配,或控制不同区域的代码。
    当想用环境变量控制c/c++ 的条件编译时, 可以用环境变量控制makefile 的条件语句,使之定义不同的编译选项。
    达到控制c/c++ 条件编译的目的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值