CMake Pkg-Config 库链接路径

Posted

技术标签:

【中文标题】CMake Pkg-Config 库链接路径【英文标题】:CMake Pkg-Config Library Link Path 【发布时间】:2012-04-22 00:56:30 【问题描述】:

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

使用我的系统上默认安装的 libgstreamermm-0.10 版本,示例段错误。好的,所以我获得了最新的源并将它们安装到 /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 行。因此,即使我在 /usr/local/include 中使用新版本 gstreamer 的标头,当我希望使用 /usr/local/lib 中的版本时,也会使用 /usr/lib 中的库. Pkg-Config 似乎接受了这一点,并进行了相应的调整,但是 CMake,即使我在内部使用 pkg-config,也不会接受链接标志。

我现在可以手动设置链接标志,但这似乎有点小题大做。我确信有更好的方法来指定它。

【问题讨论】:

【参考方案1】:

link_directories 只影响来自AFTER it 的目标。所以,你需要 将您的 add_executable 移动到 link_directories 呼叫之后。

【讨论】:

我有。我正在使用 link_directories() 指令,所以它应该添加 -L?我想我误解了 link_directories() 的作用。我可以使用 LDFLAGS 变量,但我不知道该怎么做,也不会破坏 CMake 自己的链接器标志。

以上是关于CMake Pkg-Config 库链接路径的主要内容,如果未能解决你的问题,请参考以下文章

在 CMake 脚本中添加到 pkg-config 的临时路径?

从 CMake / PkgConfig 为 pkg-config 提供选项 --define-variable

pkg-config

CMake的pkg-config模块FindPkgConfig

从`cmake`使用`pkg-config`的正确方法是啥?

pkg-config问题: