Могу ли я скрыть свои флаги ссылок от пользователей моего пакета conan?

Допустим, у меня есть библиотека, загруженная в виде пакета в конан, который использует OpenGL, и как таковые ссылки с GL в CMakeLists.txt, Нужно ли пользователям библиотеки снова явно ссылаться на GL? Предоставляет ли conan метод для его отслеживания и включения в ${CONAN_LIBS}?

Ближайшая вещь, которую я нашел в документы это метод package_infoгде кажется, что вы можете указать дополнительные параметры компоновщика, но я, кажется, не использую его должным образом в моей библиотеке conanfile.py, Я перепробовал все:

    self.cpp_info.sharedlinkflags = ["-lGL", "GL", "libGL", "libGL.so", "-llibGL.so"]

Но если в пользовательском коде я не ставлю флаг ссылки, он вызывает «неопределенную ссылку» на методы GL.

РЕДАКТИРОВАТЬ: я работаю в Linux Mint 17.

1

Решение

Да, вам нужно объявить это в conanfile.py package_info() метод, как conan отделяет сборку (как определено в ваших файлах cmake) от управления пакетами. Существует определенный атрибут для библиотек в cpp_info атрибут, который вы можете использовать:

def package_info(self):
self.cpp_info.libs = ["GL"]

это libs поле является транзитивным между зависимостями, а библиотека GL будет содержаться в ${CONAN_LIBS} переменная

sharedlinkflags тоже транзитивен и заканчивается значениями, накопленными в переменной cmake ${CMAKE_SHARED_LINKER_FLAGS}, Но, как говорится в его названии, оно предназначено только для общих ссылок, поэтому вполне вероятно, что вы не создаете такую ​​общую библиотеку, поэтому ваши флаги lib GL не применяются к вашей цели.

3

Другие решения

Других решений пока нет …