CMake Pkg-Config库链接路径

Rob*_*son 7 linker pkg-config cmake

所以我正在为libgstreamermm-0.10编译示例,我遇到了CMake的问题.

使用我的系统上默认安装的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`
Run Code Online (Sandbox Code Playgroud)

工作正常,如预期的那样.很棒,现在尝试让它与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})
Run Code Online (Sandbox Code Playgroud)

一切都编译到链接阶段,在那里我得到未定义的符号错误.然后我pkg-config --libs gstreamermm-0.10用-L/usr/local/lib 查看start 的输出.我查看输出,make VERBOSE=1并且CMake没有在链接命令中添加-L,即使我有link_directories行.所以,即使我在/ usr/local/include中使用新版gstreamer的头文件,但是当我想要使用/ usr/local/lib中的版本时,正在使用来自/ usr/lib的库. .Pkg-Config似乎已经接受了这一点,并相应地进行了调整,但是CMake,即使我在内部使用pkg-config,也没有接收到链接标志.

我现在可以手动设置链接标志,但这似乎有点像黑客.我确信有更好的方法来指定它.

Ano*_*ous 8

link_directories只影响它之后的目标.所以,你需要移动你add_executablelink_directories电话.