如果您以非常普通的方式使用cmake和pkg-config,则此解决方案有效。
但是,如果您在某个开发目录(例如/ home / me / hack / lib)中存在一个库,则使用此处显示的其他方法无法配置链接器路径。在典型安装位置下找不到的库将导致链接器错误,例如/usr/bin/ld: cannot find -lmy-hacking-library-1.0
。此解决方案解决了这种情况下的链接器错误。
另一个问题可能是pkg-config文件未正常安装,并且在cmake运行时需要使用PKG_CONFIG_PATH环境变量添加项目的pkg-config路径(请参阅与此有关的其他Stack Overflow问题)。假设您设置了正确的pkg-config路径,此解决方案也可以解决该问题。
解决方案归结为工作的CMakeLists.txt的最终版本:
cmake_minimum_required(VERSION 3.14)
project(ya-project C)
# the `pkg_check_modules` function is created with this call
find_package(PkgConfig REQUIRED)
# these calls create special `PkgConfig::<MODULE>` variables
pkg_check_modules(MY_PKG REQUIRED IMPORTED_TARGET any-package)
pkg_check_modules(YOUR_PKG REQUIRED IMPORTED_TARGET ya-package)
add_executable(program-name file.c ya.c)
target_link_libraries(program-name PUBLIC
PkgConfig::MY_PKG
PkgConfig::YOUR_PKG)
请注意,target_link_libraries
这不仅仅更改链接器命令。它还传播指定目标的其他PUBLIC属性,例如:编译器标志,编译器定义,包含路径等。
IMPORTED_TARGET
需要CMake 3.6或更高版本。