在CMake中的生成步骤后运行命令
我有一个命令行工具,应该在CMake创建.sln文件后运行。使用CMake有什么方法可以做到这一点吗 在CMakeLists.txt末尾使用execute_process(COMMAND..)没有帮助,因为这是在配置步骤之后执行的,但是,.sln文件是在生成步骤中创建的在CMake中的生成步骤后运行命令,cmake,Cmake,我有一个命令行工具,应该在CMake创建.sln文件后运行。使用CMake有什么方法可以做到这一点吗 在CMakeLists.txt末尾使用execute_process(COMMAND..)没有帮助,因为这是在配置步骤之后执行的,但是,.sln文件是在生成步骤中创建的 非常感谢 是的,将add_custom_命令与add_custom_目标结合使用可以解决此问题 举个例子,看看我对另一个问题的回答 一种相当可怕的方法是从cmake调用cmake,然后在父脚本之外执行后期生成操作 o
非常感谢 是的,将add_custom_命令与add_custom_目标结合使用可以解决此问题
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
也许我不明白你的意思,但据我所知,使用这些命令,只能在构建期间运行工具。(我使用的是Visual Studio,过程如下:我点击“构建”->CMake在有任何更改时生成新的.sln文件->VS宏询问我是否要重新加载解决方案->我按“是->构建解决方案开始->执行自定义目标。如果现在我的命令修改了解决方案,我必须重新加载,这是我想要避免的。我宁愿在CMake生成过程中修改解决方案文件n阶段。)哦,现在我明白了,您希望在cmake时间内仍然运行您的命令,但是在生成解决方案文件之后。在本例中,我提到的用于在构建时执行程序的命令实际上不是您想要的。我不确定是否有这样一个后代钩子,因为这是cmake时代的最后阶段。我建议你在cmake邮件列表中提问,并更详细地解释你想做什么。AFAIK核心开发人员没有密切关注。当更新到CMakeLists文件后cmake自动重新运行时(例如,如果您拉取或签出),这将中断。