从CMakeLists.txt调用批处理文件

时间:2015-03-27 10:11:13

标签: batch-file cmake prebuild

我公司为不同的项目使用不同的Visual Studio。 VS2003,VS2008,VS2010,VS2013 ...所以我在我的机器上安装了不同的VS.我正在使用cmake管理我的项目,并使用热键 F5 来构建项目, F5 只需从 nmake 调用构建目录。

问题是我需要先调用不同的 vcvarsall.bat 来设置构建环境,否则cmake会使用环境变量中的值,这会导致构建错误。

如何从CMakeLists.txt调用批处理文件?

1 个答案:

答案 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代码中用于获取该安装文件的位置。