CMake的pkg配置库链接路径(CMake Pkg-Config Library Link Pat

2019-07-28 20:44发布

所以我对编译libgstreamermm-0.10的例子,我碰到的与CMake的一个问题。

与默认安装我的系统,示例段错误的libgstreamermm-0.10版本。 好了,我得到了最新的代码,将其安装到/ usr /本地,并获得新的例子。 一切都看起来很不错。

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配置,因为这工作得很好,我真的不希望添加一个查找模块。 所以,我的文件看起来像这样:

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 /本地/包括,从/ usr / lib中的库被代替,当我想使用在/ usr / local / lib目录版本。 pkg配置似乎拿起这一点,并相应地调整,但CMake的,即使我有它内部使用pkg配置,不会在链接标志回暖。

我可以手动设置链接的标志,现在,但是,似乎是一个黑客攻击的一位。 我敢肯定有一个更好的方式来指定。

Answer 1:

link_directories只影响目标来后 。 所以,你需要将你的add_executable是后link_directories调用。



文章来源: CMake Pkg-Config Library Link Path