【CMakeLists】CMakeLists四种方法链接没有官方CMake配置文件的库(yaml-cpp为例)
2023-12-20 21:30:15
pkg-config和find_package是两种不同的机制,find_package通常用于查找包含有CMake配置文件(.cmake)的库。而yaml-cpp并没有提供官方的CMake配置文件,所以不能直接使用find_package来查找它。
对于没有CMake配置文件的库,你可以使用pkg-config来查找和链接。
直接链接(不推荐)
最快的方法,直接链接,但是如果没有make编译阶段会报错
target_link_libraries(YourTargetName PRIVATE yaml-cpp)
方法一: pkg_config
使用pkg-config工具可以更方便地在CMake中查找并链接库。pkg-config是一个用于检索库编译和链接标志的工具。下面是一个使用pkg-config查找和链接libyaml-cpp的示例CMakeLists.txt:
project(myProject)
cmake_minimum_required(VERSION 3.10)
# 使用pkg-config查找libyaml-cpp
find_package(PkgConfig REQUIRED)
pkg_search_module(YAML_CPP REQUIRED yaml-cpp)
add_executable(myProject main.cpp)
# 如果找到了库,将其链接到你的项目中
if(YAML_CPP_FOUND)
message(STATUS "Found libyaml-cpp: ${YAML_CPP_LIBRARIES}")
target_include_directories(myProject PRIVATE ${YAML_CPP_INCLUDE_DIRS})
target_link_libraries(myProject PRIVATE ${YAML_CPP_LIBRARIES})
else()
message(FATAL_ERROR "libyaml-cpp not found!")
endif()
方法二: find_library
首先你得明确知道你的yaml-cpp头文件与库文件位置在哪
以apt默认安装路径为例,
可以通过以下命令查找库文件路径
locate libyaml-cpp.so
可以通过以下命令查找所需头文件路径
whereis yaml-cpp.h
在CMakeLists中分别包含头文件、库文件即可
project(myProject)
cmake_minimum_required(VERSION 3.10)
# /usr/include 是yaml-cpp头文件所在位置,这个位置如果默认安装是不需要添加的,cmake会去该路径下去查找
# 如果指定了yaml-cpp的安装路径,这里需要添加你的安装路径
include_directories(/usr/include)
# 查找并链接libyaml-cpp.so库
find_library(YAML_CPP_LIBRARY NAMES yaml-cpp PATHS /usr/lib/x86_64-linux-gnu)
add_executable(myProject main.cpp)
# 如果找到了库,将其链接到你的项目中
if(YAML_CPP_LIBRARY)
message(STATUS "Found libyaml-cpp.so: ${YAML_CPP_LIBRARY}")
target_link_libraries(myProject PRIVATE ${YAML_CPP_LIBRARY})
else()
message(FATAL_ERROR "libyaml-cpp.so not found!")
endif()
方法三
如果知道头文件库文件位置直接链接路径即可
project(myProject)
cmake_minimum_required(VERSION 3.10)
# /usr/include 是yaml-cpp头文件所在位置,这个位置如果默认安装是不需要添加的,cmake会去该路径下去查找
# 如果指定了yaml-cpp的安装路径,这里需要添加你的安装路径
include_directories(/usr/include)
# 直接添加libyaml-cpp.so库文件
add_executable(myProject main.cpp)
target_link_libraries(myProject PRIVATE /usr/lib/x86_64-linux-gnu/libyaml-cpp.so)
文章来源:https://blog.csdn.net/qq_54199287/article/details/135115051
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!