Подтвердить что ты не робот

CMake добавляет depedency к цели установки

У меня проблема с cmake. Я использую UseDoxygen из http://tobias.rautenkranz.ch/cmake/doxygen/ для создания документации для моей библиотеки. Это прекрасно работает, но я знаю, что хочу реализовать следующее:  Когда я вызываю "make install", я хочу создать документацию и установить ее тоже. Поэтому я добавляю

install(DIRECTORY ${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_HTML_DIR} DESTINATION share/doc/mylib/)
add_dependencies(install doc) 

для моего CMakeLists.txt. Это приводит к ошибке:

  CMake Error at CMakeModules/UseDoxygen.cmake:145 (add_dependencies):
  add_dependencies Adding dependency to non-existent target: install
Call Stack (most recent call first):
  CMakeLists.txt:141 (include)

Можно ли получить легкое обходное решение для этого? Поскольку, если цели не подключены, шаг установки ничего не устанавливает, если только "make doc" не выполняется вручную для вызова "make install".

С уважением Grisu

4b9b3361

Ответ 1

Мы строим нашу документацию, добавляя ее с помощью add_custom_target с опцией ALL, указанной так, чтобы она строилась с целью ALL.

Затем для установки это просто команда install. Нет необходимости добавлять что-либо к цели install.

Если вы добавите документацию в цель ALL, то при выполнении make install также будет создана документация.

Ответ 2

Если вы создаете документацию по коду, не лучше ли выполнить эту команду после команды сборки? Таким образом, он будет доступен во время установки.

Вы можете добавить пользовательскую команду в POST_BUILD и выполнить там команды doxygen. Подробнее см. http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:add_custom_command

Ответ 3

Строительная документация через add_custom_target (ALL...) не является идеальным решением, так как это означает, что документация создается избыточно для всех конфигураций (Debug, Release, RelWithDebInfo, MinSizeRel).

Я хотел бы создать документацию один раз независимо от конфигурации сборки, а затем использовать опцию CONFIGURATIONS для команды install(), чтобы установить ее только для конфигураций Release и RelWithDebInfo. install() должен зависеть от цели документации, но, как я уже сказал, создайте ее только для одной конфигурации. Кажется, что нет способа добавить зависимость от install() к документации, соответствующей этим требованиям.