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

MySql--定义表存储引擎、字符集和排序规则

示例&#xff1a; CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,email VARCHAR(100) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_0900_ai_ci;注意事项&#xff1a; 字符集和排序规则可以按列覆盖表…...

编程之巅:语言的较量

第一章&#xff1a;代码之城的召集令 在遥远的数字大陆上&#xff0c;有一座名为“代码之城”的神秘都市。这里居住着各种编程语言的化身&#xff0c;他们以拟人化的形态生活&#xff0c;每种语言都有独特的性格与技能。Python是个优雅的学者&#xff0c;C是个硬核战士&#x…...

React与Vue的内置指令对比

React 与 Vue 在内置指令的设计理念和实现方式上有显著差异。Vue 提供了一套丰富的模板指令系统&#xff0c;而 React 更倾向于通过原生 JavaScript 语法和 JSX 实现类似功能。以下是两者的核心对比&#xff1a; 一、条件渲染 Vue 使用 “v-if”/ “v-else” 指令&#xff0c;…...

Spring Boot3.4.1 集成redis

Spring Boot3.4.1 集成redis 第一步 引入依赖 <!-- redis 缓存操作 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- pool 对象池 …...

从Homebrew找到openssl.cnf文件并拷贝到Go项目下使用

安装OpenSSL 在 macOS 上下载和安装 OpenSSL 最常见和推荐的方式是使用 Homebrew&#xff0c;这是一个 macOS 缺失的包管理器。 如果您还没有安装 Homebrew&#xff0c;请先安装它。安装 Homebrew 后&#xff0c;安装 OpenSSL 只需要一条命令。 步骤 1&#xff1a;安装 Home…...

网站每天几点更新,更新频率是否影响网站收录

1. 每天几点更新网站最合适&#xff1f;总怕时间选错影响收录&#xff1f; 刚开始搞网站的时候&#xff0c;是不是老纠结啥时候更新合适&#xff1f;早上刚上班&#xff1f;半夜没人的时候&#xff1f;选不对时间&#xff0c;总担心搜索引擎爬虫来了没抓到新内容&#xff0c;影…...

代码随想录第43天:图论4(最小生成树、拓扑排序)

一、冗余的边II&#xff08;Kamacoder 109&#xff09; from collections import defaultdict# 并查集 - 查找根节点&#xff08;路径压缩&#xff09; def find(fa, x):if fa[x] ! x:fa[x] find(fa, fa[x])return fa[x]# 并查集 - 合并两个集合&#xff0c;返回是否合并成功 …...

MySQL 索引和事务

目录 前言 一、MySQL 索引介绍 1. 索引概述 2. 索引作用 3. 索引的分类 3.1 普通索引 3.2 唯一索引 3.3 主键索引 3.4 组合索引 (最左前缀) 3.5 全文索引 (FULLTEXT) 3.6 创建索引的原则依据 3.7 查看索引 3.8 删除索引 二、MySQL 事务 1. 事务的 ACID 原则 MYS…...

从智能提效到产品赋能的架构实践

摘要 本文深入探讨了企业级系统从智能化提效阶段向产品赋能阶段演进的架构实践路径。通过分析传统架构的局限性,提出了以用户价值为导向的现代化架构设计理念,并结合实际案例展示了如何构建可扩展、高可用、智能化的产品架构体系。 1. 引言 在数字化转型的浪潮中,企业技术…...

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.6 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.6 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图&#xff0c;等值线图。 dataframe <-data.frame…...