返回信息流Windows下,我设置了环境变量_MS_OFFICE_VER,我怎么利用这个变量对我的源代码进行选择性的编译,例如:如果_MS_OFFICE_VER > 2003,就编译部分代码,否则编译另外部分代码。请教!!
这是一条镜像帖。来源:北邮人论坛 / cpp / #8742同步于 2008/6/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教:根据环境变量进行选择性编译的方法
PaUlGilbert
2008/6/24镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
#if _MS_OFFICE_VER > 2003
//code goes here
#else
在这_MS_OFFICE_VER是预处理命令中定义的符号,并不是我设置的环境变量,也就是说我设置了环境变量_MS_OFFICE_VER=2007,在编译器编译源代码时_MS_OFFICE_VER仍然是没有定义的,必须自己在代码中定义。没有起到预期的效果。不知还有别的方法吗?
【 在 pmps 的大作中提到: 】
: #if _MS_OFFICE_VER > 2003
: //code goes here
: #else
: ...................
无法像unix环境下直接通过shell环境变量控制编译。
但是M$提供了一种替代办法,即 cl.exe 可以读取系统环境变量 CL 以决定其编译选项及内容,因此我认为可采用如下方法:
1. 创建两个目录 inc1\ 及 inc2\
2. 创建文件 inc1\global.h ,其内容是 #define _MS_OFFICE_VER 2007
3. 创建文件 inc2\global.h ,其内容是 #define _MS_OFFICE_VER 2002
4. 在你的程序中(比如main.cpp),加入 #include "global.h"
5. 在windows console中设置环境变量CL
6. 使用 cl.exe 编译你的程序:
cl /Zp2 /Ox /I\INCLUDE \LIB\BINMODE.OBJ main.cpp
若使用指令:SET CL=/I\inc1 设置环境变量时,相当于是将 inc1\global.h 包含到 main.cpp中;
若使用指令:SET CL=/I\inc2 设置环境变量时,相当于是将 inc2\global.h 包含到 main.cpp中。
具体实施时,部分细节需要调整,请参见VC++附带MSDN中关于cl.exe的说明
【 在 PaUlGilbert (PaUl) 的大作中提到: 】
: Windows下,我设置了环境变量_MS_OFFICE_VER,我怎么利用这个变量对我的源代码进行选择性的编译,例如:如果_MS_OFFICE_VER > 2003,就编译部分代码,否则编译另外部分代码。请教!!