【发布时间】:2011-08-17 10:40:15
【问题描述】:
我有一个命令行工具,应该在 CMake 创建我的 .sln 文件后运行。有没有办法使用 CMake 做到这一点?
在 CMakeLists.txt 末尾使用 execute_process(COMMAND ..) 没有帮助,因为这是在配置步骤之后执行的,但是,.sln 文件是在生成步骤中创建的。
非常感谢!
【问题讨论】:
标签: cmake
我有一个命令行工具,应该在 CMake 创建我的 .sln 文件后运行。有没有办法使用 CMake 做到这一点?
在 CMakeLists.txt 末尾使用 execute_process(COMMAND ..) 没有帮助,因为这是在配置步骤之后执行的,但是,.sln 文件是在生成步骤中创建的。
非常感谢!
【问题讨论】:
标签: cmake
一个相当可怕的方法是通过从 cmake 调用 cmake 并在离开父脚本的过程中执行生成后的东西。
option(RECURSIVE_GENERATE "Recursive call to cmake" OFF)
if(NOT RECURSIVE_GENERATE)
message(STATUS "Recursive generate started")
execute_process(COMMAND ${CMAKE_COMMAND}
-G "${CMAKE_GENERATOR}"
-T "${CMAKE_GENERATOR_TOOLSET}"
-A "${CMAKE_GENERATOR_PLATFORM}"
-DRECURSIVE_GENERATE:BOOL=ON
${CMAKE_SOURCE_DIR})
message(STATUS "Recursive generate done")
# your post-generate steps here
# exit without doing anything else, since it already happened
return()
endif()
# The rest of the script is only processed by the executed cmake, as it
# sees RECURSIVE_GENERATE true
# all your normal configuration, targets, etc go here
如果您需要使用各种命令行选项组合(如“-DTHIS -DTHAT”)调用 cmake,此方法效果不佳,但对于许多项目来说可能是可以接受的。它适用于持久缓存的变量,包括最初生成时的所有 cmake 编译器检测。
【讨论】:
从以下链接来看,似乎没有这样的命令来指定在 CMake 生成 .sln 文件后执行。
另一种方法是编写一个包装脚本,如上述链接之一所述。
cmake ..
DoWhatYouWant.exe
【讨论】:
是的,与 add_custom_target 配对的 add_custom_command 涵盖了这一点
例如,看看我对另一个问题的回答
【讨论】: