Выполнить команду после шага генерации в CMake - PullRequest
3 голосов
/ 17 августа 2011

У меня есть инструмент командной строки, который должен быть запущен после того, как CMake создал мой .sln-файл.Есть ли способ сделать это с помощью CMake?

Использование execute_process (COMMAND ..) в конце CMakeLists.txt не помогает, потому что это выполняется после шага Configure, однако .sln-файлсоздается на этапе генерации.

Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 01 апреля 2017

Довольно ужасный способ сделать это - вызвать 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, когда они изначально генерируются.

0 голосов
/ 30 января 2018

По следующим ссылкам, похоже, что нет такой команды для указания выполнения после того, как CMake сгенерировал файлы .sln.

Альтернативой является написание скрипта-оболочки, как описано в одной из приведенных выше ссылок.

cmake ..
DoWhatYouWant.exe
0 голосов
/ 17 августа 2011

Да, add_custom_command в сочетании с add_custom_target покрыли это

Для примера посмотрите мой ответ на другой вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...