在CMake中生成命令后执行命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在CMake中生成命令后执行命令相关的知识,希望对你有一定的参考价值。
我有一个命令行工具,应该在CMake创建我的.sln文件后运行。有没有办法用CMake做到这一点?
在CMakeLists.txt末尾使用execute_process(COMMAND ..)没有帮助,因为这是在Configure步骤之后执行的,但是,在生成步骤中创建了.sln文件。
非常感谢!
答案
是的,add_custom_command与add_custom_target配对得到了覆盖
- http://cmake.org/cmake/help/cmake-2-8-docs.html#command:add_custom_command
- http://cmake.org/cmake/help/cmake-2-8-docs.html#command:add_custom_target
举个例子来看看我对另一个问题的回答
另一答案
一个相当可怕的方法是从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文件后的执行。
- https://cmake.org/pipermail/cmake/2010-May/037128.html
- https://cmake.org/pipermail/cmake/2013-April/054317.html
- https://cmake.org/Bug/view.php?id=15725
另一种方法是编写一个包装脚本,如上面的一个链接所述。
cmake ..
DoWhatYouWant.exe
以上是关于在CMake中生成命令后执行命令的主要内容,如果未能解决你的问题,请参考以下文章