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

cmake使用记录

Android相关

  • 编译一个动态库,到指定的目录
cmake_minimum_required(VERSION 3.22.1)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../v2x_algo_output/${ANDROID_ABI})
project("serial_port")
include_directories(include)
add_library(${CMAKE_PROJECT_NAME} SHARED# List C/C++ source files with relative paths to this CMakeLists.txt.SerialPort.c)
target_link_libraries(${CMAKE_PROJECT_NAME}# List libraries link to the target libraryandroidlog)
  • 编译一个动态库,并且链接其他第三方so库。
# Sets the minimum CMake version required for this project.
cmake_minimum_required(VERSION 3.22.1)project("v2x_bus_module")set(adapter "bus_adapter")include_directories(include)#build/intermediates/cxx/Debug/6u666712/obj/arm64-v8a/libalgo.sofind_library( # Sets the name of the path variable.log-lib# Specifies the name of the NDK library that# you want CMake to locate.log)add_library(${adapter} SHARED# List C/C++ source files with relative paths to this CMakeLists.txt.JniLoader.cppCarV2xService.cppBusCallbackThread.cppBusServiceContext.cpp)add_library(algoSHAREDIMPORTED)set_target_properties(algoPROPERTIESIMPORTED_LOCATION${CMAKE_CURRENT_SOURCE_DIR}/libs/libalgo.so)target_link_libraries(${adapter}algo# List libraries link to the target libraryandroid${log-lib})

Linux相关

  • 对外释放SDK的cmake,包含安装第三方库,然后内部配置。
cmake_minimum_required(VERSION 3.25)
project(TrafficSignalSDK)set(CMAKE_CXX_STANDARD 14)set(PROJECT_ROOT ${CMAKE_CURRENT_SOURCE_DIR})# 添加库
add_library(TrafficSignalSDK SHAREDsrc/TrafficSignalSDKImpl.cpp)set_target_properties(TrafficSignalSDK PROPERTIES VERSION 1.0 SOVERSION 1)# 设置库的输出目录
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/gic_libs)add_definitions(-DGLOG_USE_GLOG_EXPORT)# 头文件目录配置
target_include_directories(TrafficSignalSDKPUBLIC${PROJECT_ROOT}/include                                      # 公共头文件,供客户和库内部使用${PROJECT_ROOT}/third_party/cjson                            # 第三方头文件,供客户和库内部使用${PROJECT_ROOT}/third_party/glog_dir/include$<INSTALL_INTERFACE:include>                                 # 安装阶段后的头文件路径名称PRIVATE${PROJECT_ROOT}/src/include                                  # 内部头文件,仅供库内部使用)# 链接第三方库(
target_link_libraries(TrafficSignalSDK${PROJECT_ROOT}/third_party/glog_dir/lib/libglog.so# 如果有其他第三方库,继续添加)# 安装公共头文件(包括第三方头文件)
install(DIRECTORY ${PROJECT_ROOT}/include/ DESTINATION includeFILES_MATCHING PATTERN "*.h")install(DIRECTORY ${PROJECT_ROOT}/third_party/cjson DESTINATION includeFILES_MATCHING PATTERN "*.h")install(DIRECTORY ${PROJECT_ROOT}/third_party/glog_dir/include/glog DESTINATION includeFILES_MATCHING PATTERN "*.h")# 安装库文件
install(TARGETS TrafficSignalSDKLIBRARY DESTINATION libARCHIVE DESTINATION libRUNTIME DESTINATION bin)#第三方库安装
install(FILES ${PROJECT_ROOT}/third_party/glog_dir/lib/libglog.so.0.7.1 DESTINATION lib)#可执行的bin文件
#add_executable(TrafficSignalSDK main.cpp include/CloudTrafficLightData.h include/TrafficSignalSDK.h src/TrafficSignalSDKImpl.cpp src/TrafficSignalSDKImpl.h)

记录

set_target_properties(animals
PROPERTIES
CXX_STANDARD 14
CXX_EXTENSIONS OFF
CXX_STANDARD_REQUIRED ON
POSITION_INDEPENDENT_CODE 1
)
  • CXX_STANDARD会设置我们想要的标准。
  • CXX_EXTENSIONS告诉CMake,只启用 ISO C++ 标准的编译器标志,而 不使用特定编译器的扩展。
  • CXX_STANDARD_REQUIRED指定所选标准的版本。如果这个版本不可 用,CMake将停止配置并出现错误。当这个属性被设置为OFF 时,CMake 将寻找下一个标准的最新版本,直到一个合适的标志。这意味着,首先查找C++20 ,然后是 C++17 ,然后是 C++14 。

生成一个源文件列表

list(
APPEND sources_with_lower_optimization
geometry_circle.cpp
geometry_rhombus.cpp
)

foreach() 的四种使用方式:

  1. foreach(loop_var arg1 arg2 …) : 其中提供循环变量和显式项列表。当为 sources_with_lower_optimization 中的项打印编译器标志集时,使用此表单。注意,如果项目列表位于变量中,则必须显式展开它;也就是说,${sources_with_lower_optimization} 必须作为参数传递。

  2. 通过指定一个范围,可以对整数进行循环,例如: foreach(loop_var range total) 或 foreach(loop_var range start stop [step]) 。

  3. 对列表值变量的循环,例如: foreach(loop_var IN LISTS [list1[…]])
    。参数解释为列表,其内容就会自动展开。

  4. 对变量的循环,例如: foreach(loop_var IN ITEMS [item1 […]]) 。参数
    的内容没有展开。


set_source_files_properties(file PROPERTIES property value)
它将属性设置为给定文件的传递值。与目标非常相似,文件在CMake中也有属性,允许对构建系统进行非常细粒度的控制。源文件的可用属性列表可以在这里找到: https://cmake.org/cmake/help/v3.5/manual/cmakeproperties.7.html#source-file-properties 。


get_source_file_property(VAR file property) ,检索给定文件所需属性
的值,并将其存储在CMake VAR 变量中。


检查系统
if(CMAKE_SYSTEM_NAME STREQUAL “Linux”)
message(STATUS “Configuring on/for Linux”)


处理与平台相关的源代码
代码中可以编写:

std::string say_hello() {
#ifdef IS_WINDOWS
return std::string("Hello from Windows!");
#elif IS_LINUX
return std::string("Hello from Linux!");

cmake中可以编写

if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_compile_definitions(hello-world PUBLIC "IS_LINUX")
endif()

CMake的 CMAKE_SIZEOF_VOID_P 变量会告诉我们CPU是32位还是64位。
CMake定义了 CMAKE_HOST_SYSTEM_PROCESSOR 变量,以包含当前运行的处理器的名称。

if(CMAKE_SIZEOF_VOID_P EQUAL 8)
target_compile_definitions(arch-dependent PUBLIC "IS_64_BIT_AR
CH")
message(STATUS "Target is 64 bits")
else()
target_compile_definitions(arch-dependent PUBLIC "IS_32_BIT_AR
CH")
message(STATUS "Target is 32 bits")
endif()

cmake检查外部的环境

  • find_file:在相应路径下查找命名文件
  • find_library:查找一个库文件
  • find_package:从外部项目查找和加载设置
  • find_path:查找包含指定文件的目录
  • find_program:找到一个可执行程序
  • 找到Python解释器。这是一个 REQUIRED 依赖:
    find_package(PythonInterp REQUIRED)

相关文章:

cmake使用记录

Android相关 编译一个动态库&#xff0c;到指定的目录 cmake_minimum_required(VERSION 3.22.1) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../v2x_algo_output/${ANDROID_ABI}) project("serial_port") include_directories(include) add_…...

nginx http反向代理

系统&#xff1a;Ubuntu_24.0.4 1、安装nginx sudo apt-get update sudo apt-get install nginx sudo systemctl start nginx 2、配置nginx.conf文件 /etc/nginx/nginx.conf&#xff0c;但可以在 /etc/nginx/sites-available/ 目录下创建一个新的配置文件&#xff0c;并在…...

实数的奥秘:柯西序列深度解析

实数的奥秘&#xff1a;柯西序列深度解析 一、柯西序列的概念与性质二、柯西序列定义无理数三、柯西序列定义实数系统 实数&#xff0c;是初中学到的概念&#xff0c;我知都知道它是有理数和无理数的统称。 然而&#xff0c;实数可不只是小数点后的一堆零碎儿&#xff0c;它背后…...

信息系统管理师试题-人力资源

信息系统管理师试题-人力资源 当组织计划的人力资源需求超过供给时&#xff0c;可通过下列方法解决&#xff0c;其中不包括&#xff08;&#xff09; A降低录用标准&#xff0c;招聘新员工 B增加临时性员工和使用退休员工 C减少加班数量或工作时间 D提高员工工作效率 答案C 下…...

补偿电阻对ota零极点的影响

本文内容主要是关于补偿电阻对零极点产生的影响。 1.极点分析 该补偿电阻并不会影响在输出端的主极点&#xff0c;受影响的主要是镜像极点。 这里我们可以先单看电流镜部分&#xff0c;这个补偿电阻的作用在于将极点推向原来的两倍&#xff0c;从而达到增加带宽的目的[1]。 …...

UVM: uvm_sequence

topcic sequence overview sequence excution flow sequence class callbacks sequencer driver communication...

编译技术实验三之编译器的构造和设计

一、实验目的: 我们将设计多个不同的综合实验项目提供给学生选择。&#xff08;如&#xff1a;LL(1)文法自动生成语法分析程序的设计&#xff1b;单词的自动识别与智能纠错&#xff1b;语言的程序编辑器&#xff1b;数学计算式的识别等&#xff09;学生可在这些项目中选择1个项…...

数据挖掘——数据预处理

数据挖掘——数据预处理 数据预处理数据预处理 ——主要任务数据清洗如何处理丢失的数据如何处理噪声数据如何处理不一致数据 数据集成相关分析相关系数(也成为皮尔逊相关系数)协方差 数据规约降维法&#xff1a;PCA主成分分析降数据——抽样法数据压缩 数据预处理 数据预处理…...

ECharts饼图下钻

背景&#xff1a;项目上需要对Echarts饼图进行功能定制&#xff0c;实现点击颜色块&#xff0c;下钻显示下一层级占比说明&#xff1a;饼图实现点击下钻/面包屑返回的功能 数据结构 [{name: a,value: 1,children: [...]},... ]点击下钻 // 为图表绑定点击事件&#xff08;需要…...

【RK3568笔记】Android修改开机动画

概述 Android 的开机动画是由一系列连续的 PNG 图片作为帧组成的动画形式&#xff0c;不是一张 GIF 图片。将各帧 PNG 图片以压缩方式进行保存&#xff08;压缩方式要求是存储压缩&#xff09;&#xff0c;并将保存的文件名命名为 bootanimation.zip&#xff0c;这个 bootanim…...

嵌入式技术之Linux(Ubuntu) 一

一、Linux入门 1.硬件和操作系统以及用户的关系 一个传感器&#xff0c;获得数据后&#xff0c;需要向服务器发送数据。传感器传数据给上位机。 上位机需要一个程序来接收数据&#xff0c;那么这个上位机是什么机器&#xff1f; 我们的笔记本电脑就可以当成上位机。 两个手…...

代码随想录day39 动态规划7

打家劫舍 题目&#xff1a;198.打家劫舍 213.打家劫舍II 337.打家劫舍III 需要重做&#xff1a;全部 198.打家劫舍 思路&#xff1a;第i个房子偷与不偷&#xff0c;取决于第i-2个房子和第i-1个房子 注意&#xff1a;注意下标的一致性。现在的下标含义是房子的下标&#x…...

ESP32-S3模组上实现低功耗(5)

接前一篇文章:ESP32-S3模组上实现低功耗(4) 本文内容参考: 系统低功耗模式介绍 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档 电源管理 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档...

PDF转文本以及转图片:itextpdf

文章目录 &#x1f412;个人主页&#xff1a;信计2102罗铠威&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380; 1. itextpdf1.1导入itextpdf的maven依赖1.2 提取文本代码1.3 pdf转换成图片代码&#xff08;本地图片地址还是线上PDF的URL地址均支持&#…...

AnaConda下载PyTorch慢的解决办法

使用Conda下载比较慢&#xff0c;改为pip下载 复制下载链接到迅雷下载 激活虚拟环境&#xff0c;安装whl&#xff0c;即可安装成功 pip install D:\openai.wiki\ChatGLM2-6B\torch-2.4.1cu121-cp38-cp38-win_amd64.whl...

移动端自动化测试Appium-java

一、Appium的简介 移动端的自动化测试框架 模拟人的操作进行功能自动化常用于功能测试、兼容性测试 跨平台的自动化测试 二、Appium的原理 核心是web服务器&#xff0c;接受客户端的连接&#xff0c;接收客户端的命令&#xff0c;在手机设备上执行命令&#xff0c;收集命令…...

IO: 作业:Day1

思维导图 main.c #include"student.h" int main(int argc, const char *argv[]) { stuPtr hcreat(); int n0; add_node(h); add_node(h); add_node(h); show(h); save(h,"student.txt"); stuPtr ptrc…...

ue5 替换角色的骨骼网格体和动画蓝图

一开始动画蓝图&#xff0c;骨骼网格体都是用的女性角色 现在把它换成男性 编译 保存 运行 把动画类换成ABP_Manny 进入ABP_Manny中 进入到idle 找到这个拖进来 编译 就变成站着端枪 运行一下&#xff0c;没有问题...

el-cascader 树状选择-点击父级禁用子级

背景&#xff1a;项目上需要实现树状选择&#xff0c;点击父级禁用子级的功能&#xff0c;element组件本身没有该配置项说明&#xff1a;需要实现几个功能点&#xff1a;点击父级禁用子级&#xff1b;再次点击取消禁用&#xff1b;仅回填所选级&#xff1b;上下级不关联实现代码…...

AWS re:Invent 的创新技术

本月早些时候&#xff0c;Amazon 于 12 月 1 日至 5 日在内华达州拉斯维加斯举行了为期 5 天的 re&#xff1a;Invent 大会。如果您从未参加过 re&#xff1a;Invent 会议&#xff0c;那么最能描述它的词是“巨大”——不仅从与会者人数&#xff08;60,000 人&#xff09;来看&…...

如何轻松掌握OpCore Simplify:黑苹果配置的终极智能解决方案

如何轻松掌握OpCore Simplify&#xff1a;黑苹果配置的终极智能解决方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为黑苹果安装过程中复杂的…...

G-Helper:华硕笔记本性能调校的终极轻量级解决方案

G-Helper&#xff1a;华硕笔记本性能调校的终极轻量级解决方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar,…...

OpCore-Simplify:告别手动配置,15分钟搞定专业级黑苹果EFI

OpCore-Simplify&#xff1a;告别手动配置&#xff0c;15分钟搞定专业级黑苹果EFI 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的OpenCo…...

Qwen3智能字幕系统效果展示:直播回放语音→低延迟字幕流实时生成

Qwen3智能字幕系统效果展示&#xff1a;直播回放语音→低延迟字幕流实时生成 想象一下这个场景&#xff1a;一场精彩的直播刚刚结束&#xff0c;你迫不及待地想回顾其中的高光片段&#xff0c;或者需要快速整理出会议的核心内容。面对长达数小时的视频&#xff0c;手动添加字幕…...

Kafka安全加固实战:SASL/PLAIN认证配置详解

1. 为什么你的Kafka需要SASL/PLAIN认证&#xff1f; 最近帮朋友排查一个Kafka数据泄露问题&#xff0c;发现他们测试环境的Kafka集群居然裸奔在公网上&#xff0c;没有任何认证措施。这就像把自家大门钥匙插在门锁上&#xff0c;谁都能随便进出。今天我们就来聊聊如何用SASL/PL…...

3分钟快速上手ETCD Keeper:可视化etcd管理的最佳实践

3分钟快速上手ETCD Keeper&#xff1a;可视化etcd管理的最佳实践 【免费下载链接】etcdkeeper web ui client for etcd 项目地址: https://gitcode.com/gh_mirrors/et/etcdkeeper ETCD Keeper是一款专为etcd设计的轻量级Web UI客户端工具&#xff0c;它通过直观的图形界…...

G-Helper终极指南:5分钟让你的华硕笔记本性能翻倍

G-Helper终极指南&#xff1a;5分钟让你的华硕笔记本性能翻倍 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, …...

终极指南:如何在浏览器中无需安装任何软件直接查看PPT文件

终极指南&#xff1a;如何在浏览器中无需安装任何软件直接查看PPT文件 【免费下载链接】PPTXjs jquery plugin for convertation pptx to html 项目地址: https://gitcode.com/gh_mirrors/pp/PPTXjs 还在为没有安装PowerPoint而无法查看PPT文件烦恼吗&#xff1f;今天我…...

别再只用Rect和Circle了!解锁CocosCreator Mask._graphics的隐藏玩法:自定义笔刷与动态擦除动画

突破常规&#xff1a;用CocosCreator Mask._graphics打造高级动态擦除艺术 在数字创作的世界里&#xff0c;擦除效果早已超越了简单的"刮刮卡"和"橡皮擦"概念。当大多数开发者还在使用基础的圆形和矩形遮罩时&#xff0c;那些掌握Mask._graphics深度技巧的…...

洛雪音乐助手:3步快速上手的免费开源音乐播放器

洛雪音乐助手&#xff1a;3步快速上手的免费开源音乐播放器 【免费下载链接】lx-music-desktop 一个基于 Electron 的音乐软件 项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop 洛雪音乐助手是一款基于Electron和Vue开发的免费开源跨平台音乐软件&a…...