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

cmake常用命令学习

1.include

https://blog.csdn.net/qq_38410730/article/details/102677143

CmakeLists.txt才是cmake的正统文件,而.cmake文件是一个模块文件,可以被includeCMakeLists.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名会根据STATICSHARED成为name.aname.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的正统文件&#xff0c;而.cmake文件是一个模块文件&#xff0c;可以被include到CMakeLists.txt中。 include指令一般用于语句的复用&#xff0c;也就是说&#xff0c;如果有…...

K8S可视化管理平台KubeSphere

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

Bugku-CTF-聪明的php

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

【MySQL进阶】MySQL主从复制

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

本地部署文生图模型 Flux

本地部署文生图模型 Flux 0. 引言1. 本地部署1-1. 创建虚拟环境1-2. 安装依赖模块1-3. 创建 Web UI1-4. 启动 Web UI1-5. 访问 Web UI 0. 引言 2024年8月1日&#xff0c;blackforestlabs.ai发布了 FLUX.1 模型套件。 FLUX.1 文本到图像模型套件&#xff0c;该套件定义了文本到…...

谷粒商城实战笔记-127-全文检索-ElasticSearch-整合-测试复杂检索

文章目录 一&#xff0c;使用Elasticsearch的Java RESTHighLevel Client完成复杂的查询请求1. 创建检索请求 (SearchRequest)2. 构造检索条件 (SearchSourceBuilder)3. 执行检索 (SearchResponse)4. 处理解析结果5. 获取聚合信息 二&#xff0c;AI时代的效率提升 一&#xff0c…...

解锁PyCharm:破解依赖库导入之谜

解锁PyCharm&#xff1a;破解依赖库导入之谜 PyCharm作为Python开发者的强大IDE&#xff0c;提供了丰富的功能来简化开发流程。然而&#xff0c;在使用过程中&#xff0c;开发者可能会遇到导入依赖库时出现的错误。本文将深入探讨PyCharm中导入依赖库报错的问题&#xff0c;并…...

JSON-Viewer插件:json格式查看器

npm install vue-json-viewer 2&#xff0c;main.js 引入 import JsonViewer from vue-json-viewer Vue.use(JsonViewer) 3&#xff0c;组件里写入这个组件 <json-viewer:value"textSecond":expand-depth"5"copyableboxedsort></json-viewer…...

HDFS块信息异常,spark无法读取数据

背景&#xff1a;flume数据落盘到hdfs上时&#xff0c;正在写入的文件一般是以.log.tmp结尾的文件&#xff0c;当flume将文件关闭以后将变为&#xff1a;.log 结尾的文件。由于我们使用阿里云的服务器&#xff0c;经常会有个别节点挂掉(进程在&#xff0c;无法通信&#xff0c;…...

TCP协议概述

TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。它由IETF的RFC 793定义&#xff0c;并在各种通信系统中广泛应用&#xff0c;为不同但互连的计算机通信网络的主计算机中的成对进程之…...

SpringSecurity-3(认证和授权+SpringSecurity入门案例+自定义认证+数据库认证)

SpringSecurity使用数据库数据完成认证 5 SpringSecurity使用数据库数据完成认证5.1 认证流程分析5.1.1 UsernamePasswordAuthenticationFilter5.1.2 AuthenticationManager5.1.3 AbstractUserDetailsAuthenticationProvider5.1.4 AbstractUserDetailsAuthenticationProvider中…...

英国AI大学排名

计算机学科英国Top10 “计算机科学与信息系统”学科除了最受关注的“计算机科学”专业&#xff0c;还包括了“人工智能”“软件工程”“计算机金融”等众多分支专业。 1.帝国理工学院 Imperial College London 单以计算机专业本科来讲&#xff0c;仅Computing这个专业&#x…...

渗透测试与高级攻防技术(二)网络安全技术的前沿探讨:渗透测试与高级攻防

文章目录 引言 第一章&#xff1a;入侵检测与防御系统&#xff08;IDS/IPS&#xff09;1.1 IDS与IPS的区别1.2 Cisco IDS/IPS系统 第二章&#xff1a;蜜罐技术2.1 蜜罐技术概述2.2 搭建蜜罐系统2.3 蜜罐技术的优缺点 第三章&#xff1a;社会工程攻击3.1 社会工程攻击概述3.2 社…...

Windows系统下安装mujoco环境的教程【原创】

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

【秋招笔试】2024-08-03-科大讯飞秋招笔试题(算法岗)-三语言题解(CPP/Python/Java)

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

2024华数杯数学建模竞赛选题建议+初步分析

提示&#xff1a;DS C君认为的难度&#xff1a;C<A<B&#xff0c;开放度&#xff1a;A<B<C。 综合评价来看 A题适合对机械臂和机器人运动学感兴趣的同学&#xff0c;尤其是有一定编程和优化算法基础的同学。不建议非相关专业同学选择。 B题挑战较大&#xff0…...

大模型的经典面试问题及答案

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

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…...

前端面试:八股文系列(一)

更多详情&#xff1a;爱米的前端小笔记&#xff08;csdn~xitujuejin~zhiHu~Baidu~小红shu&#xff09;同步更新&#xff0c;等你来看&#xff01;都是利用下班时间整理的&#xff0c;整理不易&#xff0c;大家多多&#x1f44d;&#x1f49b;➕&#x1f914;哦&#xff01;你们…...

设施农业“AutoML“时代:大模型自动调参,让农业算法模型更简单易用

&#xff08;于景鑫 北京市农林科学院智能装备技术研究中心&#xff09;设施农业是现代农业的重要发展方向,但在数字化、智能化的进程中仍面临诸多挑战。传统的农业算法模型虽然可以为设施农业提供一定的决策支持,但在实际应用中往往受限于参数调优复杂、模型泛化能力差等因素。…...

LinkedList接口源码解读

LinkedList 接口源码解读 前言 因为追求质量&#xff0c;所以写的较慢。大概在接下来的三天内会把LinkedList源码解析出完。已经出完啦&#xff01;废话不多说&#xff0c;正片开始&#xff01; &#xff08;文章最后面有后记哦~&#xff09; 大家都知道&#xff0c;LinkedL…...

nohup将代码放到后端运行查看nohup命令

tail -f nohup.outnohup python your_script.py > /path/to/your/directory/output.log 2>&1 &...

MacOS的100个超实用技巧

目录 1. 界面和导航 1.1 使用热角 1.2 多桌面切换 1.3 快速访问应用 1.4 隐藏/显示菜单栏 1.5 使用Mission Control 2. 文件管理 2.1 使用Finder标签 2.2 快速查看文件 2.3 标签式窗口管理 2.4 使用Smart Folders 2.5 文件重命名 3. 系统设置 3.1 自定义Dock 3.…...

本地调试指引文档

在开发组件库时&#xff0c;我们经常需要在真实的项目中测试组件库的功能&#xff0c;所以需要进行本地调试&#xff0c;本文介绍两种组件库本地调试流程&#xff0c; 1.使用beta版本 2.使用npm link 两种都可以作为本地调试的方案&#xff0c;本文作为一个参考资料&#xff0…...

【C++】一堆数组 冒泡排序

冒泡排序&#xff0c;一种很常见的排序法师 这章要划重点&#xff0c;很重要&#xff01;&#xff01; 排序思路为前一个元素与后一个元素比大小&#xff0c;一直循环一轮&#xff0c;找出最大/最小的那个元素后&#xff0c;进行下一轮&#xff0c;找到第二大/小的元素......…...

[最短路SPFA]--启动!!!!!

基础模板 #include<bits/stdc.h> #define ll long long #define fi first #define se second #define pb push_back #define PII pair<int,int > #define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) using namespace std; const int N 1e610; int …...

大模型是否潜在地进行多跳推理?

人工智能咨询培训老师叶梓 转载标明出处 以往的研究表明&#xff0c;基于Transformer的LLMs能够在参数中存储和检索事实信息&#xff0c;以完成简单提示&#xff0c;例如“Stevie Wonder的母亲是谁”。此外&#xff0c;当必要信息明确给出时&#xff0c;LLMs表现出了显著的上下…...

人为什么不能长期待在家里?三个原因告诉你答案

在现代社会的快节奏生活中,人们时常渴望能够拥有一段长时间待在家里的闲暇时光,幻想这会是一段惬意、舒适且自由的经历。然而,实际情况往往并非如此。许多人在经历了数日甚至更长时间的居家生活后,会逐渐感受到诸多负面情绪和不良影响。以下将详细阐述人为什么不能长期待在…...

MATLAB画散点密度图(附代码和测试数据的压缩包)

1. 有关 Matlab 获取代码关注WZZHHH回复关键词&#xff0c;或者咸鱼关注&#xff1a;WZZHHH123 怀俄明探空站数据解算PWV和Tm&#xff1a;怀俄明探空站数据解算PWV和Tm 怀俄明多线程下载探空站数据&#xff08;包括检查和下载遗漏数据的代码&#xff09;&#xff1a;怀俄明多线…...

徐州做网站费用/北京百度推广代理公司

2019独角兽企业重金招聘Python工程师标准>>> Jenkins是代码持续集成工具&#xff0c;Sonar则是一个代码质量管理平台。在编译代码时&#xff0c;可以使用SonarQube提供的sonar-maven-plugin插件执行执行sonar代码质量检查&#xff0c;将检查结果传给SonarQube服务器…...

网站制作的收费/优化seo教程技术

操作PDF文档时&#xff0c;打印是常见的需求之一。针对不同的打印需求&#xff0c;可分多种情况来进行&#xff0c;如设置静默打印、指定打印页码范围和打印纸张大小、双面打印、黑白打印等等。经过测试&#xff0c;下面将对常见的几种PDF打印需求做一些归纳总结&#xff0c;这…...

餐饮商家做网站的好处/百度首页官网

不充钱&#xff0c;你怎么AC&#xff1f; 题目&#xff1a;http://codevs.cn/problem/1091/ 大家都写的 DFS&#xff0c;然而我想到了一种贪心的做法&#xff0c;重点是可以A 普遍的贪心是每次删掉该深度子树最大的点&#xff0c;但是如果有一边卡一条链就会WA 我们何不进一步考…...

北京大兴最专业的网站建设公司/站内关键词排名软件

1、 选择有效的关键字&#xff1a; 关键字是描述你的产品及服务的词语&#xff0c;选择适当的关键字是建立一个高排名网站的第一步。选择关 键字的一个重要的技巧是选取那些常为人们在搜索时所用到的关键字。 2、 理解关键字&#xff1a; 在你收集所需的关键字之前&#xff…...

网站流量数据查询/网站媒体推广

在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足: nums1[i] == nums2[j] 且绘制的直线不与任何其他连线(非水平线)相交。 请注意,连线即使在端点也不能相交:每个…...

网站建设郑州/qq推广软件

地址转载于:https://www.cnblogs.com/chiangbt/archive/2009/09/27/1575244.html...