【发布时间】:2019-09-26 01:28:09
【问题描述】:
我正在尝试编写 CMakeLists.txt 来构建 仅限自定义目标 项目。
也就是说,它不适用于通常的 C/C++ 项目;所有构建配方均使用ADD_CUSTOM_COMMAND() 和ADD_CUSTOM_TARGET() 提供。我使用 CMake 的原因是管理构建目标内容之间的依赖关系并利用增量构建的优势。
问题是,当我在 Windows cmd.exe 上执行 cmake CMakeLists.txt 时,它会尝试查找 Windows SDK 或 MSBuild.exe——在项目中构建目标时从来不需要这些。
cmd.exe> cmake CMakeLists.txt
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.17134.
CMake Error at CMakeLists.txt:6 (PROJECT):
Failed to run MSBuild Command:
MSBuild.exe
to get the value of VCTargetsPath:
Cannot find file
-- Configuring incomplete, errors occurred!
See also "CMakeFiles/CMakeOutput.log"
CMakeLists.txt的标头是:
cmake_minimum_required ( VERSION 3.0 )
set ( CMAKE_GENERATOR "Unix Makefile" )
set ( CMAKE_VERBOSE_MAKEFILE true )
# Project name
project ( "awesome-project" NONE ) # <language>=NONE for skipping compiler check
...
正如我上面提到的,构建目标的所有配方都在CMakeLists.txt 中提供;既不需要 Windows SDK 也不需要 Visual Studio。
我认为有一些 CMake 指令可以跳过 MSBuild 的调用,但我找不到它。这种情况下怎么写CMakeLists.txt?
【问题讨论】:
-
CMake 使用
MSBuild.exe不是用于编译,而是用于building 项目 - 它会检测依赖文件中的更改并运行您对应的命令在add_custom_target和add_custom_command中使用。问题是 CMake 只是一个 configuration 工具,而不是一个 build 工具。用于构建的工具是根据generator 选择的,这是您无法在CMakeLists.txt中设置的一些内容之一。构建工具MSBuild.exe对应Visual Studio生成器。
标签: cmake cross-platform