2015-09-12 1 views
0

Я использую стороннюю библиотеку rbdl, в которой содержится rbdl.pc.cmake, которая, я полагаю, включена для использования pkg_check_modules в файле cmake.pkg_check_modules не удалось найти * .pc.cmake

Я обновляю PKG_CONFIG_PATH, чтобы указать на папку rbdl

set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${CMAKE_BINARY_DIR}/externals/rbdl") 
pkg_check_modules(RBDL rbdl) 

но pkg_check_modules говорит, что не может найти модуль.

Когда я вручную дублирую rbdl.pc.cmake, переименуйте копию в rbdl.pc и запустите pkg-config --cflags --libs rbdl в терминале, тогда мой cmake также начнет работать!

Интересно, теперь, даже если я удалю rbdl.pc, модуль rbdl, если он полностью найден rbdl.pc.cmake!

Так что мои вопросы:

  1. В чем разница между * .pc и * .pc.cmake?
  2. Как правильно настроить мой cmake для работы с оригинальным rbdl.pc.cmake?
  3. Почему rbdl.pc.cmake начинает приниматься pkg_check_modules после того, как настроить его дублирование, переименование копии и запуск pkg-config вручную?
+0

Какую версию CMake вы используете? В CMake 3.1 было некоторое улучшение с pgk-config. – usr1234567

+0

@ usr1234567 Я использую 2.8. Это может быть причина? – Ivan

+0

Если возможно, используйте CMake 3.1 или новее, так как эта версия имеет улучшенные функции pkg-config. – usr1234567

ответ

1

Вы понимаете это неправильно! rbdl.pc.cmake - это всего лишь файл шаблона. Он не должен использоваться вами! Посмотрите на CMakeLists.txt строка 160 - configure_file() используется для визуализации переменных («цитируется» @ в файле шаблона) и создает файл rbdl.pc (настоящий pkg-config). Последний должен быть установлен (каким-то образом), а затем будет доступен для pkg-config, поэтому его можно использовать в вашем проекте.

pkg-config глупо не интерпретировать или проверять компилятор/флаги компоновщика любым способом, так что ваш переименованный файл «работает» (да, производя недопустимый командной строки для компилятора/линкера).

Желаю вам ознакомиться с документацией CMake до, пытаясь что-то использовать, используя это! Это сэкономит ваше время и даст вам необходимые знания, которые мешают вам делать stupid такие вещи, как вы описали в своем вопросе ;-)

 Смежные вопросы

  • Нет связанных вопросов^_^