在CMake中生成命令后执行命令

时间:2011-08-17 10:40:15

标签: cmake

我有一个命令行工具,应该在CMake创建我的.sln文件后运行。有没有办法用CMake做到这一点?

在CMakeLists.txt末尾使用execute_process(COMMAND ..)没有帮助,因为这是在Configure步骤之后执行的,但是,在生成步骤中创建了.sln文件。

非常感谢!

3 个答案:

答案 0 :(得分:0)

是的,add_custom_command与add_custom_target配对得到了覆盖

举个例子来看看我对另一个问题的回答

答案 1 :(得分:0)

一种相当可怕的方法是从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编译器检测。

答案 2 :(得分:0)

从以下链接看,似乎没有这样的命令来指定CMake生成.sln文件后的执行。

另一种方法是编写一个包装脚本,如上面的链接之一所述。

cmake ..
DoWhatYouWant.exe