Я пытаюсь, чтобы CMake запускал три команды bash или скрипт bash. Однако я не могу заставить его работать.Выполнение команды bash с помощью CMake
Команды Баш являются:
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")
Однако, это ничего не строит. Что я делаю не так?
Кроме того, пока я здесь спрашиваю: должна ли быть включена третья команда, чтобы перейти в двоичную папку?
Спасибо!
Прежде всего, почему вы не используете параметр 'WORKING_DIRECTORY' вместо этих команд' cd'? Что-то вроде 'execute_process (COMMAND make WORKING_DIRECTORY $ {CMAKE_SOURCE_DIR}/dependencies/library)'. Я полагаю, 'execute_process()' вызовы не разделяют одну и ту же среду. Кроме того, если бы я был вами, я бы посмотрел ['add_custom_target()') (http://www.cmake.org/cmake/help/v3.0/command/add_custom_target.html?highlight=add_custom_target) и ['add_custom_command()'] (http://www.cmake.org/cmake/help/v3.0/command/add_custom_command.html?highlight=add_custom_command) для такого рода вещей. – Kamiccolo
Я не могу прокомментировать большую часть того, что сказал @Kamiccolo, но я могу сказать, что я думаю, что детали о состоянии 'execute_process', которые не разделяют, почти наверняка точны. * * Невероятно * вероятно, что 'cd' в первой команде изменяет каталог только для этого процесса, а не для каких-либо других. –
Если вы планируете создавать стороннюю библиотеку, вам, вероятно, лучше использовать модуль [ExternalProject] (http://www.cmake.org/cmake/help/v3.0/module/ExternalProject.html). – sakra