pkg_check_modules не может найти *.pc.cmake

Я использую стороннюю библиотеку rbdl, которая содержит rbdl.pc.cmake, который, как я полагаю, ' включен для использования pkg_check_modules в файле 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 вручную?

person Ivan    schedule 12.09.2015    source источник
comment
Какую версию CMake вы используете? Были некоторые улучшения с pgk-config в CMake 3.1.   -  person usr1234567    schedule 13.09.2015
comment
@ usr1234567 Я использую 2.8. Может ли это быть причиной?   -  person Ivan    schedule 13.09.2015
comment
Если возможно, используйте CMake 3.1 или новее, так как в этой версии улучшены функции pkg-config.   -  person usr1234567    schedule 14.09.2015


Ответы (1)


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

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

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

person zaufi    schedule 13.09.2015