Как экспортировать системную библиотеку с помощью cmake?

Как я могу экспортировать библиотеки, от которых зависит библиотека 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? Нет.)

7
задан Doug 13 August 2011 в 05:29
поделиться