Довольно ужасный способ сделать это - вызвать 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
Этот метод не работает, если вам нужно вызвать cmake с различными комбинациями параметров командной строки, такими как "-DTHIS -DTHAT", но, вероятно, приемлем для многих проектов. Он отлично работает с постоянно кэшируемыми переменными, включая все обнаружение компилятора cmake, когда они изначально генерируются.