Итак, я компилирую примеры для libgstreamermm-0.10, и у меня возникла проблема с CMake.CMake Pkg-Config Library Link Path
С версией libgstreamermm-0.10, установленной по умолчанию в моей системе, пример segfaults. Хорошо, поэтому я получил последние источники и установил их в/usr/local и получил новый пример. Все выглядит хорошо.
g++ main.cc player_window.cc -o test `pkg-config --cflags --libs gtkmm-3.0` `pkg-config --cflags --libs gstreamermm-0.10`
работает нормально и, как ожидалось. Отлично, теперь попробуй, чтобы он хорошо играл с CMake. Я делаю быстрый файл CMakeLists.txt. Я использую pkg-config, так как это отлично работает, и я действительно не хочу добавлять модуль find. Так что мой файл выглядит следующим образом:
cmake_minimum_required(VERSION 2.6.2)
project(media_player_gtkmm)
INCLUDE(FindPkgConfig)
set(SOURCES main.cc player_window.cc)
add_executable(media_player_gtkmm ${SOURCES})
#dependencies
pkg_check_modules(GSTMM REQUIRED gstreamermm-0.10)
pkg_check_modules(GTKMM REQUIRED gtkmm-3.0)
include_directories(${GTKMM_INCLUDE_DIRS} ${GSTMM_INCLUDE_DIRS})
link_directories(${GTKMM_LIBRARY_DIRS} ${GSTMM_LIBRARY_DIRS})
target_link_libraries(media_player_gtkmm ${GTKMM_LIBRARIES} ${GSTMM_LIBRARIES})
Все не компилирует до стадии ссылки, где я получаю неопределенные ошибки символа. Затем я вижу, что вывод pkg-config --libs gstreamermm-0.10
начинается с -L/usr/local/lib. Я смотрю вывод make VERBOSE=1
, а CMake НЕ добавляет -L к команде ссылки, хотя у меня есть строка link_directories. Поэтому, хотя я использую заголовки для новой версии gstreamer в/usr/local/include, вместо этого используется библиотека из/usr/lib, когда я хочу использовать версию в/usr/local/lib , Кажется, что Pkg-Config подходит к этому и настраивается соответствующим образом, но CMake, даже если я его использую с помощью pkg-config внутри, не поднимает флаги ссылок.
Я могу вручную установить флаги ссылок на данный момент, но это похоже на взлома. Я уверен, что есть лучший способ указать это.
У меня есть. Я использую директиву link_directories(), поэтому он должен добавить -L? Наверное, я не понимаю, что делает link_directories(). Я мог бы использовать переменную LDFLAGS, но я не уверен, как это сделать, а не clobber CMake собственных флагов компоновщика. –
Правильно, новый ответ подходит ... – Anonymous
Это сделало, спасибо! –