1 引言
很多大型第三方框架使用Pkg-Config维护它依赖库路径、头文件路径、编译选项、链接选项等信息,文件名后缀是.pc,方便第三方开发者便捷地获取相关信息,例如OpenCV,通常都是大型且复杂的第三方库
2 ucode的cmakelist
include(FindPkgConfig)
pkg_check_modules(JSONC REQUIRED json-c)
include_directories(${JSONC_INCLUDE_DIRS})
这个cmake include的路径不是我想要得;
我使用了如下打印
message(STATUS "include dir is ${JSONC_INCLUDE_DIRS}")
message(STATUS "lib is ${JSONC_LIBRARIES}")
message(STATUS "lib dir is ${JSONC_LINK_LIBRARIES}")
输出
/usr/include/json-c
json-c
/usr/lib/x86_64-linux-gnu/libjson-c.so
3. /usr/include/ 路径来源
FindPkgConfig 会去如下目录里找
/usr/lib/pkgconfig目录
/usr/share/pkgconfig目录
/usr/local/lib/pkgconfig目录
/usr/local/share/pkgconfig目录
pkgconfig目录下由对应的xxx.pc
如果把lib当作第三方库编译到项目中,如json-c
在它的cmakelist中有如下代码:
configure_file(json-c.pc.in json-c.pc @ONLY)
set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")
install(FILES ${PROJECT_BINARY_DIR}/json-c.pc DESTINATION "${INSTALL_PKGCONFIG_DIR}")
项目中的json-c.pc 是 json-c.pc.in来生成的
参考:
https://www.jianshu.com/p/eb6b06463da9
https://www.jianshu.com/p/129037a4afd8