#cmake
#cmake
Вопрос:
на самом деле я борюсь с CMAKE_CUSTOM_COMMAND. На самом деле я пытаюсь определить отдельную цель make для своих демонстрационных исходников, в то время как у меня есть зависимости, которые я мог решить только после «обычной» сборки, когда генерируется любой файл. Эта цель должна выполнить некоторые шаги после любой обычной сборки:
- Скомпилируйте исходные тексты
- Создание исполняемых файлов
До этого момента все работало нормально, используя команду add_subdirectory с разделенными файлами CMakeLists, но это не удается, когда я пытаюсь решить зависимости, которые еще не созданы (т. Е. скопировать dll на платформе Windows в каталог демонстрационного исполняемого файла)
- Копирование зависимостей (DLL и т.д.)
Я пытался использовать команды CMAKE_CUSTOM_TARGET и CMAKE_CUSTOM_COMMAND. Но у меня не получается. Как я мог бы вызвать сборку моих демонстрационных исходников, используя отдельный целевой объект?
Спасибо за любую помощь. С наилучшими пожеланиями.
Ответ №1:
Для построения одной цели за другой вы можете использовать команду cmake add_dependencies, специально разработанную для этой цели.
set (MY_LIB_DEPS
target1
target2
#...
targetn)
add_library(MY_LIB source.cpp)
target_link_libraries(MY_LIB ${MY_LIB_DEPS} 3rd_party_lib)
add_dependencies(MY_LIB ${MY_LIB_DEPS})
Также копирование библиотек DLL и исполняемых файлов обычно выполняется во время установки, а не сборки (с помощью команды make — while, выполняемой make install
сразу после make
выполнения). Для достижения этой цели используйте команду install. Например, для установки исполняемого файла его можно использовать следующим образом:
add_executable(my_exec my_exec_source.cpp)
target_link_libraries(my_exec ${MY_EXEC_DEPS})
#...
install(TARGETS my_exec RUNTIME
DESTINATION ${MY_PROJECT_EXEC_INSTALL_PATH}
RENAME "${MY_PROJECT_PREFIX}-main_exec")