当前位置:  开发笔记 > 开发工具 > 正文

在预构建事件中设置环境变量并在编译步骤中使用

如何解决《在预构建事件中设置环境变量并在编译步骤中使用》经验,为你挑选了1个好方法。

在Visual Studio 2003中,我尝试在预构建事件中设置一个环境变量,然后在编译步骤中使用该变量,但该值似乎不会传播.例如,如果预构建事件包含此内容(直接或在批处理文件中):

set MY_LIB_VERSION=1.0.0

和AdditionalIncludeDirectories有这个:

c:\path\to\library\my_lib_v$(MY_LIB_VERSION)\include

如果my_lib_v1.0.0目录存在,我希望编译工作.但相反,我得到了

c:\path\to\prog\my_prog.c(22) : fatal error C1083: Cannot open include file: 'my_lib.h'
Project : warning PRJ0018 : The following environment variables were not found:
$(MY_LIB_VERSION)

我推断在预构建事件中设置的环境变量因此没有传播到编译步骤,但我可能会遗漏一些东西.

如何在预构建事件中设置环境变量并在编译步骤中使用它?

(或者,任何其他明智的方法来定义一个库版本并为AdditionalIncludeDirectories和AdditionalLibraryDirectories多次使用它也会这样做.)


更新:我最终以不同的方式解决了我们的问题.我们正在使用Subversion,并svn:externals在被调用的项目源的子目录上设置该属性dependencies,这样项目的签出将另外检出\libraries\my_lib_v1.0.0dependencies\my_lib在工作副本中调用它.然后项目设置可以参考dependencies\my_lib\include等.升级到版本1.0.1 my_lib只是编辑svn:externals属性的问题 - 代码和项目设置不需要更改.



1> Timo Geusch..:

我必须承认,我从未尝试过在预构建步骤中设置环境变量,而且我可以明白为什么它不一定能正常工作(运行批处理文件很可能会触发一个单独的过程,而您却想操作父进程的环境)。

我一直在使用的一种变通办法是,创建一个批处理文件来设置必要的环境变量,然后使用适当的解决方案文件启动Visual Studio,但只有在您可以确定启动Visual Studio之前确定必要的设置后,该方法才起作用。我在下面复制了此批处理文件的框架:

REM
REM Set up VS environment with defaults (this is for 2008) - need to do this first
REM
call "C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"
REM
REM Set the environment variables required by the project
REM
set BOOST_BASE=C:\Boost\include\boost-1_35
REM
REM If you need to manipulate the path, do it here
REM
REM
REM Finally, start VS with the appropriate solution file
REM
devenv MyProjectWithBoost.sln

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有