Запуск команды 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()
вызов для восстановления объектного файла в случае изменения некоторых источников ввода.