Как использовать CMAKE_CUSTOM_TARGET

#cmake

#cmake

Вопрос:

на самом деле я борюсь с CMAKE_CUSTOM_COMMAND. На самом деле я пытаюсь определить отдельную цель make для своих демонстрационных исходников, в то время как у меня есть зависимости, которые я мог решить только после «обычной» сборки, когда генерируется любой файл. Эта цель должна выполнить некоторые шаги после любой обычной сборки:

  1. Скомпилируйте исходные тексты
  2. Создание исполняемых файлов

До этого момента все работало нормально, используя команду add_subdirectory с разделенными файлами CMakeLists, но это не удается, когда я пытаюсь решить зависимости, которые еще не созданы (т. Е. скопировать dll на платформе Windows в каталог демонстрационного исполняемого файла)

  1. Копирование зависимостей (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")