【CMakeLists】CMakeLists四种方法链接没有官方CMake配置文件的库(yaml-cpp为例)

发布时间:2023年12月21日

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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。