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_path和find_library CMake内置命令,搜索ZeroMQ头文件和库,并使用find_package_handle_standard_args设置相关变量。
FindZeroMQ.cmake
if(NOT ZeroMQ_ROOT)
set(ZeroMQ_ROOT "$ENV{ZeroMQ_ROOT}")
endif()
if

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

被折叠的 条评论
为什么被折叠?



