from:http://blog.csdn.net/hejinjing_tom_com/article/details/7949304
用环境变量控制c/c++的条件编译
author:hjjdebugdate: 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参数定义, 环境变量影响不了.
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
$(warning "_TESTMACRO not defined")
endif
$(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++ 条件编译的目的