cmake常用命令学习
1.include
https://blog.csdn.net/qq_38410730/article/details/102677143
CmakeLists.txt
才是cmake
的正统文件,而.cmake
文件是一个模块文件,可以被include
到CMakeLists.txt
中。
include指令一般用于语句的复用,也就是说,如果有一些语句需要在很多CMakeLists.txt文件中使用,为避免重复编写,可以将其写在.cmake文件中,然后在需要的CMakeLists.txt文件中进行include操作就行了。
include(file|module)
.cmake文件里包含了一些cmake命令和一些宏/函数,当CMakeLists.txt包含该.cmake文件时,当编译运行时,该.cmake里的一些命令就会在该包含处得到执行,并且在包含以后的地方能够调用该.cmake里的一些宏和函数。
之后有机会再了解什么事宏和函数。
2.protobuf_generate_cpp
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS foo.proto)
将foo.proto文件生成源码,使用PROTO_SRC,PROTO_HARS变量分别指代生成的cpp和h文件并可用于连接到target和设置include。
要求protobuf_generate_cpp命令和生成add_executable() 或 add_library() 的命令必须在同一个CMakeList中.
3.file命令
file(GLOB variable [RELATIVE path] [globbingexpressions]...)
file GLOB命令主要用于匹配规则在指定的目录内匹配到所需要的文件。GLOB 会产生一个由所有匹配globbing表达式的文件组成的列表,并将其保存到变量中。(如果指定了RELATIVE 标记,返回的结果将是与指定的路径相对的路径构成的列表。)
如果没有写正则表达式,那么什么文件都匹配不到。例子:
file(GLOB files *)// 会把文件和文件夹都包含进来
foreach(file IN LISTS files)message(STATUS ${file})
endforeach(file)
例子,注意要用双引号,cmake不支持单引号:
打印结果,目录和文件是同等地位,被包含进来:
这段代码的意思是挑选出当前文件下的所有文件,然后打印。
file(MAKE_DIRECTORY [directory1 directory2 ...])
MAKE_DIRECTORY在指定目录处创建子目录,如果它们的父目录不存在,也会创建它们的父目录。
5.add_subdirectory
https://www.jianshu.com/p/07acea4e86a3,添加一个子目录并构建该子目录。
add_subdirectory (source_dir [binary_dir] [EXCLUDE_FROM_ALL])# 绝对路径或当前目录的相对路径 []是可选参数
binary_dir,指定文件输出存放路径。
6.自带变量
https://blog.csdn.net/wzj_110/article/details/116674655, https://juejin.cn/post/6844903999448055815
内置变量
CMAKE_CURRENT_LIST_DIR: 当前处理的'cmake或CMakeListst.txt文件'所在的目录
CMAKE_CURRENT_SOURCE_DIR:指的是当前处理的 CMakeLists.txt 文件所在的路径。
PROJECT_SOURCE_DIR:项目源文件的目录,如果直接在代码目录下cmake,那么此变量与PROJECT_BINARY_DIR内容相同;
PROJECT_BINARY_DIR:可执行文件的目录。
7.function用法
https://blog.csdn.net/qq_38410730/article/details/102677143
function(<name> [arg1 [arg2 [arg3 ...]]])COMMAND1(ARGS ...) # 命令语句COMMAND2(ARGS ...)...
function()
可以用${arg1}
来引用变量。当宏和函数调用的时候,如果传递的是经set设置的变量,必须通过${}取出内容。
function(Foo arg)set(${arg} "abc" PARENT_SCOPE)message("# After change the value of arg.")message("arg = ${arg}")
endfunction()
message("=== Call function ===")
Foo(test)message("test value = ${test}")//CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
include(test.cmake)
打印结果
=== Call function ===
# After change the value of arg.
arg = test //不太明白这里为什么是test值?
test value = abc
总之在CMakeLists访问变量就带上${}。
8.add_library()
add_library(<name> [STATIC | SHARED | MODULE][EXCLUDE_FROM_ALL][source1] [source2 ...])# Normal Libraries
- 添加名为
name
的库,name全局唯一; - 库的类型是
STATIC(静态库)
/SHARED(动态库)
/MODULE(模块库)
之一,生成的library名会根据STATIC
或SHARED
成为name.a
或name.lib;默认是STATIC选项。
add_library(<name> OBJECT [<source>...]) # Object Libraries
创建对象库(Object Library).对象库编译源文件,但不会将其存档或链接到库中。由add_library命令或add_executable命令创建的其它目标可以使用$<TARGET_OBJECTS:objlib>形式的表达式作为源来引用对象,其中objlib是对象库名称。
9.include_directories()
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 …]) //默认是AFTER
将指定目录添加到编译器的头文件搜索路径之下。相当于g++选项中的-I参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用.
使用SYSTEM
选项,会把指定目录当成系统的搜索目录。
10.get_filename_component
https://blog.csdn.net/wzj_110/article/details/116431616
cmake获取'文件名'的'特定'部分。
路径+文件名。
11.add_executable
https://blog.csdn.net/MacKendy/article/details/122549819
基于特定的源文件,创建可执行文件,名为<name>或者<name>.exe(根据平台不同,带exe后缀的是win平台)。
创建名为<name>的target,这个target在make的时候会编译为可执行文件。编译的源文件为[source1] [source2]…。
https://www.cnblogs.com/dbai/p/17209898.html,add_executable的3种写法,一种是最基础麻烦的,第二是用file命令,第三种是aux但头文件要单独加。
12.aux_source_directory
//语法:
aux_source_directory(<dir> <variable>)//例子:
//# 查找目录下的所有源文件
//# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
13.target_include_directories
target_include_directories(<target> [SYSTEM] [AFTER|BEFORE]<INTERFACE|PUBLIC|PRIVATE> [items1...][<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
该命令可以指定目标(exe或者so文件)需要包含的头文件路径。命名的<目标>必须是由add_executable()或add_library()之类的命令创建的,并且不能是ALIAS目标。
14.add_dependencies
add_dependencies(<target> [<target-dependency>]...)
明确依赖关系:始终在CMakeLists.txt中明确指定目标间的依赖关系,避免隐式依赖。
例子:【cmake 基础小知识】如何在CMake项目中使用add_dependencies命令管理目标依赖关系-阿里云开发者社区
相关文章:

cmake常用命令学习
1.include https://blog.csdn.net/qq_38410730/article/details/102677143 CmakeLists.txt才是cmake的正统文件,而.cmake文件是一个模块文件,可以被include到CMakeLists.txt中。 include指令一般用于语句的复用,也就是说,如果有…...

K8S可视化管理平台KubeSphere
什么是 KubeSphere ? KubeSphere 是一款开源项目,在目前主流容器调度平台 Kubernetes 之上构建的企业级分布式多租户容器管理平台,提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时ÿ…...

Bugku-CTF-聪明的php
pass a parameter and maybe the flag files filename is random :> 传递一个参数,可能标记文件的文件名是随机的: 于是传一下参,在原网页后面加上/?a1,发现网页出现了变化 3.传入参数,一般情况下是文件包含,或者命令执行&…...

【MySQL进阶】MySQL主从复制
目录 MySQL主从复制 概念 主从形式 一主多从 多主一从 双主复制 主从级联复制 主从复制原理 三个线程 两个日志文件 主从复制的主要工作模式 异步复制 半同步复制 全同步复制 MySQL主从复制 概念 MySQL主从复制是一种数据分布机制,允许从一个数据库服…...

本地部署文生图模型 Flux
本地部署文生图模型 Flux 0. 引言1. 本地部署1-1. 创建虚拟环境1-2. 安装依赖模块1-3. 创建 Web UI1-4. 启动 Web UI1-5. 访问 Web UI 0. 引言 2024年8月1日,blackforestlabs.ai发布了 FLUX.1 模型套件。 FLUX.1 文本到图像模型套件,该套件定义了文本到…...
谷粒商城实战笔记-127-全文检索-ElasticSearch-整合-测试复杂检索
文章目录 一,使用Elasticsearch的Java RESTHighLevel Client完成复杂的查询请求1. 创建检索请求 (SearchRequest)2. 构造检索条件 (SearchSourceBuilder)3. 执行检索 (SearchResponse)4. 处理解析结果5. 获取聚合信息 二,AI时代的效率提升 一,…...
解锁PyCharm:破解依赖库导入之谜
解锁PyCharm:破解依赖库导入之谜 PyCharm作为Python开发者的强大IDE,提供了丰富的功能来简化开发流程。然而,在使用过程中,开发者可能会遇到导入依赖库时出现的错误。本文将深入探讨PyCharm中导入依赖库报错的问题,并…...
JSON-Viewer插件:json格式查看器
npm install vue-json-viewer 2,main.js 引入 import JsonViewer from vue-json-viewer Vue.use(JsonViewer) 3,组件里写入这个组件 <json-viewer:value"textSecond":expand-depth"5"copyableboxedsort></json-viewer…...
HDFS块信息异常,spark无法读取数据
背景:flume数据落盘到hdfs上时,正在写入的文件一般是以.log.tmp结尾的文件,当flume将文件关闭以后将变为:.log 结尾的文件。由于我们使用阿里云的服务器,经常会有个别节点挂掉(进程在,无法通信,…...
TCP协议概述
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它由IETF的RFC 793定义,并在各种通信系统中广泛应用,为不同但互连的计算机通信网络的主计算机中的成对进程之…...

SpringSecurity-3(认证和授权+SpringSecurity入门案例+自定义认证+数据库认证)
SpringSecurity使用数据库数据完成认证 5 SpringSecurity使用数据库数据完成认证5.1 认证流程分析5.1.1 UsernamePasswordAuthenticationFilter5.1.2 AuthenticationManager5.1.3 AbstractUserDetailsAuthenticationProvider5.1.4 AbstractUserDetailsAuthenticationProvider中…...

英国AI大学排名
计算机学科英国Top10 “计算机科学与信息系统”学科除了最受关注的“计算机科学”专业,还包括了“人工智能”“软件工程”“计算机金融”等众多分支专业。 1.帝国理工学院 Imperial College London 单以计算机专业本科来讲,仅Computing这个专业&#x…...
渗透测试与高级攻防技术(二)网络安全技术的前沿探讨:渗透测试与高级攻防
文章目录 引言 第一章:入侵检测与防御系统(IDS/IPS)1.1 IDS与IPS的区别1.2 Cisco IDS/IPS系统 第二章:蜜罐技术2.1 蜜罐技术概述2.2 搭建蜜罐系统2.3 蜜罐技术的优缺点 第三章:社会工程攻击3.1 社会工程攻击概述3.2 社…...

Windows系统下安装mujoco环境的教程【原创】
在学习Mujoco仿真的过程中,我先前是在linux系统下进行的研究与学习,今天来试试看在windows系统中安装mujoco仿真环境。 先前在linux中的一些关于mujoco学习记录的博客:Mujoco仿真【xml文件的学习 3】_mujoco打开xml文件-CSDN博客 下面开始wi…...

【秋招笔试】2024-08-03-科大讯飞秋招笔试题(算法岗)-三语言题解(CPP/Python/Java)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍖 本次题目难度中等偏上,最后一题又是…...

2024华数杯数学建模竞赛选题建议+初步分析
提示:DS C君认为的难度:C<A<B,开放度:A<B<C。 综合评价来看 A题适合对机械臂和机器人运动学感兴趣的同学,尤其是有一定编程和优化算法基础的同学。不建议非相关专业同学选择。 B题挑战较大࿰…...

大模型的经典面试问题及答案
大语言模型(LLM)在人工智能中变得越来越重要,在各个行业都有应用。随着对大语言模型专业人才需求的增长,本文提供了一套全面的面试问题和答案,涵盖了基本概念、先进技术和实际应用。如果你正在为面试做准备,…...

nodejs环境搭建
1.准备工作 将他解压到指定路径(我是在D:\tools)并在解压文件下建立node_global和node_cache这两个目录 注1:新建目录说明(自带的比较难找,较麻烦) node_global:npm全局安装位置 node_cache:npm缓存路径 如图: 2.配置环境变量 …...
C#基础:LINQ表达式的单独定义和编译使用
//编写表达式 Expression<Func<AlarmGroupInfo, bool>> express x > x.DataSource 1 && x.AlarmStatus2;// 编译表达式 Func<AlarmGroupInfo, bool> compiledExpression express.Compile();// 应用到 LINQ 查询 var resultlistss alarmgroupl…...

前端面试:八股文系列(一)
更多详情:爱米的前端小笔记(csdn~xitujuejin~zhiHu~Baidu~小红shu)同步更新,等你来看!都是利用下班时间整理的,整理不易,大家多多👍💛➕🤔哦!你们…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...