Как я могу экспортировать библиотеки, от которых зависит библиотека cmake, чтобы исполняемый файл, зависящий от этой библиотеки, не зависел вручную от зависимостей этой библиотеки?
Это немного слишком много, поэтому вот пример:
dummy (application) ----> зависит от liba
liba ----> зависит от libpng
Компиляция dummy генерирует ошибки:
-- Found LIBPNG
-- Found LIBA
-- Configuring done
-- Generating done
-- Build files have been written to: /home/doug/projects/dummy/build
Linking C executable dummy
../deps/liba/build/liba.a(a.c.o): In function `a_dummy':
/home/doug/projects/dummy/deps/liba/src/a.c:6: undefined reference to `png_sig_cmp'
collect2: ld returned 1 exit status
make[2]: *** [dummy] Error 1
make[1]: *** [CMakeFiles/dummy.dir/all] Error 2
make: *** [all] Error 2
I может исправить это, добавив это в CMakeLists.txt для фиктивного:
TARGET_LINK_LIBRARIES (фиктивный png)
Однако фиктивный элемент не знает, как liba реализует свой api. В какой-то момент он может измениться на libjpg или что-то еще, что сломает фиктивное приложение.
После получения помощи из списка рассылки cmake я был направлен к этому примеру для экспорта вещей : http://www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file
Однако, следуя этому подходу, я застрял на этой строке:
export (TARGETS $ {LIBPNG_LIBRARY} FILE "$ {PROJECT_BINARY_DIR} /ALibraryDepends.cmake ")
Ясно, что здесь что-то не хватает; эта команда «экспорт» выглядит так, будто предназначена для экспорта подпроектов на высокий уровень; т.е. вложенные проекты внутри liba.
Однако проблема не в этом.
При настройке liba (или любой библиотеки cmake) я всегда генерирую список зависимостей, которые не являются частью этого проекта.
Как я могу экспортировать их, чтобы они отображались как часть LIBA_LIBRARY, когда я использую find_package () для разрешения liba?
Использование статических библиотек не вариант (статическая библиотека для чего-то, что связано с opengl? Нет.)