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

news/2024/9/25 16:11:47/

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(radarSerialPRIVATE ${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.soDESTINATION lib)

http://www.ppmy.cn/news/1530360.html

相关文章

14、线程池ForkJoinPool实战及其工作原理分析

1. 由一道算法题引发的思考 算法题:如何充分利用多核CPU的性能,快速对一个2千万大小的数组进行排序? 1)首先这是一道排序的算法题,而且是需要使用高效的排序算法对2千万大小的数组进行排序,可以考虑使用快…

web平台搭建-LAMP(CentOS-7)

一. 准备工作 环境要求: 操作系统:CentOS 7.X 64位 网络配置:nmtui字符终端图形管理工具或者直接编辑配置文件 关闭SELinux和firewalld防火墙 防火墙: 临时关闭:systemctl stop firewalld 永久关闭:systemc…

React——点击事件函数调用问题

问题 <MessageOutlined onClick{handleIconClick(test_task_id,test_run_id)} style{{ width: 36 ,color: #3875f6, filter: brightness(1.5)}} />直接在onClick属性中调用函数并传递参数的语法会有问题。 在JSX中如果想要在事件处理器&#xff08;如onClick&#xff…

Git clone远程仓库没有其他分支的问题

在使用Git克隆&#xff08;Git clone&#xff09;时&#xff0c;可能遇到分支不全的问题。有以下几种可能的原因和解决方法&#xff1a; 未将所有分支克隆下来&#xff1a;默认情况下&#xff0c;Git只会克隆远程仓库的主分支。如果您想要克隆其他分支&#xff0c;可以使用以下…

uniapp组件封装和父子组件间通讯的介绍和详细案例

Uniapp 是一个使用 Vue.js 开发跨平台应用的前端框架&#xff0c;组件封装和父子组件间通讯是其重要的特性之一。 一、组件封装 为什么要封装组件 提高代码的可维护性和可复用性。将特定功能封装成独立的组件&#xff0c;可以在不同的页面或项目中重复使用&#xff0c;减少代码…

让C#程序在linux环境运行

今晚花一些时间&#xff0c;总结net程序如何在linux环境运行的一些技术路线。 1、采用.Net Core框架 NET Core 使用了 .NET Core Runtime&#xff0c;它可以在 Windows、Linux 和 macOS 等多个操作系统上运行。可以采用Visual Studio生成Linux版本的dll。 在Linux系统中&…

C++的哲学思想

C的哲学思想 文章目录 C的哲学思想&#x1f4a1;前言&#x1f4a1;C的哲学思想☁️C底层不应该基于任何其他语言&#xff08;汇编语言除外&#xff09;☁️只为使用的东西付费&#xff08;不需要为没有使用到的语言特性付费&#xff09;☁️以低成本提供高级抽象&#xff08;更…

前端框架对比与选择指南

在现代 web 开发中&#xff0c;前端框架的选择对项目的成功与开发效率至关重要。本文将对当前流行的前端框架进行深入对比&#xff0c;帮助开发者在 Angular、React 和 Vue.js 中做出明智的选择。更多内容&#xff0c;请查阅 1. 框架概述 1.1 Angular Angular 是由谷歌开发的…