我公司为不同的项目使用不同的Visual Studio。 VS2003,VS2008,VS2010,VS2013 ...所以我在我的机器上安装了不同的VS.我正在使用cmake管理我的项目,并使用热键 F5 来构建项目, F5 只需从 nmake 调用构建目录。
问题是我需要先调用不同的 vcvarsall.bat 来设置构建环境,否则cmake会使用环境变量中的值,这会导致构建错误。
如何从CMakeLists.txt调用批处理文件?
答案 0 :(得分:1)
你似乎从错误的角度接近这个。在处理CMakeLists时,环境是启动CMake的环境(对于NMake生成器,必须在CMake启动之前正确配置)。生成构建系统后,CMake无法执行任何操作。 CMakeList中的任何内容都不能为构建构建设置环境,只有在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代码中用于获取该安装文件的位置。