当前位置: 首页 > 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/a/317936.html

相关文章:

  • web安全测试渗透案例知识点总结(上)——小白入狱
  • 微澜:用 OceanBase 搭建基于知识图谱的实时资讯流的应用实践
  • Java 责任链模式 减少 if else 实战案例
  • 深入探索React合成事件(SyntheticEvent):跨浏览器的事件处理利器
  • Flink1.19编译并Standalone模式本地运行
  • Ubuntu配置阿里云docker apt源
  • 深度学习(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合集