从 CMakeLists.txt 调用批处理文件

call batch file from 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"
)

以上不是复制粘贴的例子,应该是传达大概的意思。

VCINSTALLDIRvsvarsall.bat设置的环境变量;它在 CMake 代码中用于获取该安装文件的位置。