当前位置: 首页 > 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;来看&…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...