【CMake】3.单项目单模块添加第三方依赖包示例工程

发布时间:2024年01月05日

CMake 示例工程代码

https://github.com/LABELNET/cmake-simple

单项目单模块 - 添加第三方依赖示例工程

https://github.com/LABELNET/cmake-simple/tree/main/simple-deps

1. 单模块工程 + 第三方依赖

CMake 单模块工程,这是一个示例工程

  • simple-deps , 项目名称
  • cmake , 第三方依赖
  • demo , 主模块 main

2. 目录结构

$ .SIMPLE-DEPS      
│   CMakeLists.txt                 # 项目根 CMakeLists.txt , 用于项目配置
│   README.md                      # 说明文档,无关
├───.vscode                        # 头文件路径配置
│       c_cpp_properties.json
├───cmake                          # 第三方依赖文件夹
├───build                          # CMake 编译输出
└───demo                           # 主模块
    │   CMakeLists.txt             # 主模块 CMakeLists.txt                    
    ├───include                    # 源码:头文件文件夹
    │       demo_utils.h
    └───src                        # 源码: 代码文件夹
            demo_utils.cc
            main.cc

3. 项目/CMakeLists.txt

以项目编译配置为主

cmake_minimum_required(VERSION 3.18)

# 项目名称
set(PROJECT_NAME simple-deps)
project(${PROJECT_NAME} VERSION 0.1.0)

# 1.编译类型
if (NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release)
endif()

# 2. C++ 标准库
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# 3. 第三方库
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake;${CMAKE_MODULE_PATH}")

# 4.工程名称
project(${PROJECT_NAME} LANGUAGES CXX)

# 5.主模块 main
add_subdirectory(demo)

# 6.打包器
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

4. 主模块/CMakeLists.txt

第三方依赖示例,使用 OpenCV , 显示一张图片

以功能代码实现为主

cmake_minimum_required(VERSION 3.18)

# 模块名称
set(MODULE_NAME demo)

# 1.可执行文件
add_executable(${MODULE_NAME})

# 2.源码,注意: 源文件代码格式,这里用的为 .cc 文件
file(GLOB_RECURSE srcs CONFIGURE_DEPENDS src/*.cc include/*.h)

# 3.目标
target_sources(${MODULE_NAME} PUBLIC ${srcs})

# 4.头文件
target_include_directories(${MODULE_NAME} PUBLIC include)

# 5. 第三方依赖 OpenCV
find_package(OpenCV CONFIG REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
# 6. 第三方依赖 Spdlog
find_package(spdlog CONFIG REQUIRED)

# 7. Link 依赖
target_link_libraries(
    ${MODULE_NAME} 
    ${OpenCV_LIBRARIES}
    spdlog::spdlog
)

5. 运行

点击 Build ,可进行编译
点击 Run , 先进行编译,再运行。若已经编译,将直接运行
在这里插入图片描述

文章来源:https://blog.csdn.net/LABLENET/article/details/135406098
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。