当前位置: 首页 > article >正文

cmaklist流程控制——调试及发布

cmaklist流程控制

目前只会配置-编译调试-打包发布,并且不会workflow控制
后续学习配置-编译调试-测试-打包发布workflow控制,理解整个流程,目前对流程控制理解也不够。

1.CMake Presets

先于Cmakelist文件,指导项目配置。
参考CMake之Presets编写
**CMAKE_BUILD_TYPE:**指定了编译类型,debug还是release
**CMAKE_INSTALL_PREFIX:**指定了cmakelist中install的前缀路径,类似于cmake -CMAKE_INSTALL_PREFIX
CMakePresets.json

{
    "version": 8,
    "configurePresets": [
        {
            "name": "radar-debug",
            "displayName": "radar-debug",
            "description": "radar-debug",
            "generator": "Unix Makefiles",
            "binaryDir": "${sourceDir}/out/debug/build",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug",
                "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/debug/install"
            }
        },
        {
            "name": "radar-release",
            "displayName": "radar-release",
            "description": "radar-release",
            "generator": "Unix Makefiles",
            "binaryDir": "${sourceDir}/out/release/build",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Release",
                "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/release/install"
            }
        }
    ]
}

2.Cmakelist

通过Presets配置的CMAKE_BUILD_TYPE 控制编译,配合add_definitions(-DDEBUG_PRINTF)控制程序表现

cmake_minimum_required(VERSION 3.5.0)
project(radarSerial VERSION 0.1.0 LANGUAGES C CXX)

# Set the default build type to Release if not specified
if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
endif()

# Configure Debug and Release flags
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")  # Debug信息,关闭优化
set(CMAKE_CXX_FLAGS_RELEASE "-O3")   # 高级优化

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    add_definitions(-DDEBUG_PRINTF)
    add_definitions(-DDEBUG_ENV)
endif()

find_package(MY_LIBRARY_PATH NAMES CppLinuxSerial PATHS ${CMAKE_CURRENT_SOURCE_DIR}/lib/cmake NO_DEFAULT_PATH REQUIRED)

set(LIB_mqtt3c_PATH /usr/local/lib/)

message(STATUS "CppLinuxSerial_DIR = ${CppLinuxSerial_DIR}")

add_executable(radarSerial main.cpp)

target_include_directories(
    radarSerial 
    PUBLIC 
      "${CMAKE_CURRENT_SOURCE_DIR}/include"
      "${CMAKE_CURRENT_SOURCE_DIR}/include/CppLinuxSerial"
)

target_sources(radarSerial
  PRIVATE 
  ${CMAKE_CURRENT_SOURCE_DIR}/src/comm.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/src/mqtt.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/src/cJSON.c)

target_link_libraries(radarSerial CppLinuxSerial::CppLinuxSerial pthread paho-mqtt3c)

install(TARGETS radarSerial RUNTIME DESTINATION bin)
install(FILES
${LIB_mqtt3c_PATH}/libpaho-mqtt3c.so 
${LIB_mqtt3c_PATH}/libpaho-mqtt3c.so.1 
${LIB_mqtt3c_PATH}/libpaho-mqtt3c.so.1.3 
${CMAKE_CURRENT_SOURCE_DIR}/lib/libCppLinuxSerial.so
        DESTINATION lib)


http://www.kler.cn/news/317936.html

相关文章:

  • 深度学习(5):torch.nn.Module
  • 实战OpenCV之几何变换
  • 【学习笔记】exkmp(Z函数)
  • 关于C++的备忘录
  • Qt-QComboBox输入类控件(31)
  • 说一说Zookeeper的应用场景及其原理
  • pandas中数据的合并
  • 200Kg大载重多旋翼无人机应用前景详解
  • Solidity——抽象合约和接口详解
  • 【路径规划】 通过使用前向动态规划算法在地形上找到最优路径
  • 运维工程师面试整理-沟通能力
  • Spring Security 详解:保护Java应用的强大盾牌
  • linux下不同库出现符号冲突的解决方式
  • LLM - 理解 多模态大语言模型(MLLM) 的 幻觉(Hallucination) 与相关技术 (七)
  • Jenkins基于tag的构建
  • Redis: 特色,业务场景举例,底层原理,持续进阶等问题梳理
  • 基于C#+SQL Server(CS界面)学生选课及成绩查询管理系统
  • sql语法学习:关键点和详细解释
  • 软件开发人员利用Mendix推动GenAI战略
  • Frontiers出版社系列SCISSCI合集
  • Nginx配置负载均衡
  • 2024全国研究生数学建模竞赛(数学建模研赛)ABCDEF题深度建模+全解全析+完整文章
  • 机器翻译之多头注意力(MultiAttentionn)在Seq2Seq的应用
  • 如何使用Spring Cloud Gateway搭建网关系统
  • 怎么录制游戏视频?精选5款游戏录屏软件
  • 电源芯片测试系统如何完成欠压关断/欠压关断滞后?
  • 某花顺爬虫逆向分析
  • Leetcode 543. 124. 二叉树的直径 树形dp C++实现
  • 根据[国家统计局最新行政区规划]数据库代码
  • 研1日记15