我的公司对不同的项目使用不同的 Visual Studio。VS2003,VS2008,VS2010,VS2013... 所以我的机器上安装了不同的 VS。我正在使用 cmake 来管理我的项目,并且我使用热键F5来构建项目,F5只是从构建目录中调用nmake 。
问题是我需要先调用不同的vcvarsall.bat来设置构建环境,否则 cmake 使用环境变量中的值,这会导致构建错误。
如何从 CMakeLists.txt 调用批处理文件?
我的公司对不同的项目使用不同的 Visual Studio。VS2003,VS2008,VS2010,VS2013... 所以我的机器上安装了不同的 VS。我正在使用 cmake 来管理我的项目,并且我使用热键F5来构建项目,F5只是从构建目录中调用nmake 。
问题是我需要先调用不同的vcvarsall.bat来设置构建环境,否则 cmake 使用环境变量中的值,这会导致构建错误。
如何从 CMakeLists.txt 调用批处理文件?
你似乎从错误的角度来处理这个问题。处理 CMakeLists 时,环境是启动 CMake 的环境(对于 NMake 生成器,必须在 CMake 启动之前正确配置它)。一旦生成了构建系统,CMake 就无法进行任何操作。CMakeList 中的任何内容都无法为构建设置环境——构建仅在 CMake 完成运行很久之后才会发生。
您可以做的是在您的 CMake 过程中添加一个步骤,该步骤会将一些环境配置打印到构建目录中;然后,您将重新绑定热键以使用该配置。像这样的东西:
if(CMAKE_SIZEOF_VOID_P GREATER 4)
set(Arg amd64)
else()
set(Arg x84)
endf()
file(
WRITE ${CMAKE_BINARY_DIR}/build.bat
"@call $ENV{VCINSTALLDIR}\\vsvarsall.bat ${Arg}\n@nmake"
)
以上不是复制粘贴的示例,它应该传达总体思路。
VCINSTALLDIR
vsvarsall.bat
是由;设置的环境变量 它在 CMake 代码中用于获取该设置文件的位置。