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

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...