Запуск команды bash через CMake

Я пытаюсь заставить CMake выполнить три команды bash или сценарий bash. Однако я не могу заставить его работать.

команды bash:

    cd ${CMAKE_SOURCE_DIR}/dependencies/library
    make
    cd ${CMAKE_BINARY_DIR}

по сути, я хотел бы, чтобы CMake построил библиотеку в этом каталоге, если она еще не существует.

вот код CMake, который я пробовал:

if(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")
   execute_process(COMMAND cd ${CMAKE_SOURCE_DIR}/dependencies/library)
   execute_process(COMMAND make)
   execute_process(COMMAND cd ${CMAKE_BINARY_DIR})
endif(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")

однако он ничего не строит. Что я делаю не так?

кроме того, пока я здесь спрашиваю об этом: если третья команда, чтобы перейти в двоичную папку, будет включена?

спасибо!

1 ответов


execute_process() выполняется во время конфигурации. Но вы хотите, чтобы это работало во время сборки, таким образом add_custom_command() и add_custom_target() это то, что вы ищете.

в этом специальном случае вы хотите создать выходной файл, поэтому вы должны пойти на add_custom_command() (оба по существу одинаковы, но command производит один или несколько выходных файлов, в то время как target нет.

фрагмент cmake для этого должен выглядеть примерно так: следующий:

add_custom_command(
    OUTPUT ${CMAKE_SOURCE_DIR}/dependencies/library/lib.o
    WORKING_DIR ${CMAKE_SOURCE_DIR}/dependencies/library
    COMMAND make
)

затем вам нужно добавить выходной файл в другую цель как зависимость, и все должно (надеюсь) работать так, как ожидалось.

вы также можете добавить DEPENDS заявления add_custom_command() вызов для восстановления объектного файла в случае изменения некоторых источников ввода.