CMake:检测外部库---自定义find模块

本文介绍了如何在CMake中通过编写自定义FindZeroMQ模块来检测和配置ZeroMQ库,包括CMakeLists.txt的使用和FindZeroMQ.cmake中的详细步骤,以及不同操作系统下的库搜索策略。

CMake:检测外部库---自定义find模块

导言

上一篇,我们了解了CMake其中一种自定义检测外部库的方式,本篇将展示通过编写一个find模块来定位系统上的ZeroMQ库,以便能够在非Unix操作系统上检测该库。

项目结构

.
├── CMakeLists.txt
├── FindZeroMQ.cmake
├── zmq_client.cpp
└── zmq_server.cpp

项目地址:

https://gitee.com/jiangli01/tutorials/tree/master/cmake-tutorial/chapter3/06

:相关cpp源码与上一篇相同。

CMakeLists.txt

CMakeLists.txt

cmake_minimum_required(VERSION 3.10 FATAL_ERROR)

project(test_zmq LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_PREFIX_PATH /opt/zmq)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})

find_package(ZeroMQ REQUIRED)

add_executable(hw_server zmq_server.cpp)

target_include_directories(hw_server
  PRIVATE ${ZeroMQ_INCLUDE_DIRS}
)

target_link_libraries(hw_server
  PRIVATE ${ZeroMQ_LIBRARIES}
)

add_executable(hw_client zmq_client.cpp)

target_include_directories(hw_client
  PRIVATE ${ZeroMQ_INCLUDE_DIRS}
)

target_link_libraries(hw_client
  PRIVATE ${ZeroMQ_LIBRARIES}
)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})

这行代码是用于在CMake中向CMAKE_MODULE_PATH变量中添加一个目录的路径。通常,CMAKE_MODULE_PATH用于存放自定义的CMake模块文件,这些模块文件可以在项目的CMakeLists.txt文件中通过include等命令来使用。

具体而言,这行代码的作用是将${CMAKE_CURRENT_SOURCE_DIR}添加到CMAKE_MODULE_PATH中。${CMAKE_CURRENT_SOURCE_DIR}表示当前CMakeLists.txt所在的目录,即源代码目录。这样做的目的是为了告诉CMake在这个目录中查找自定义的CMake模块。

这样CMake就可以找到,我们自定义的FindZeroMQ.cmake模块。

此示例的主CMakeLists.txt在使用FindZeroMQ.cmake时,与上一篇中使用的CMakeLists.txt不同。这个模块使用find_pathfind_library CMake内置命令,搜索ZeroMQ头文件和库,并使用find_package_handle_standard_args设置相关变量。

FindZeroMQ.cmake

if(NOT ZeroMQ_ROOT)
  set(ZeroMQ_ROOT "$ENV{ZeroMQ_ROOT}")
endif()

if
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值