cmake扩展(5)——file命令排除部分文件

在cmake中可以使用file命令获取需要的文件,并且支持正则/通配符,使用起来还是很方便的。

#语法file({GLOB | GLOB_RECURSE} <out-var> [...] [<globbing-expr>...])#example
file(GLOB_RECURSE SOURCES "src/*.h" "src/*.cpp" "src/*.ui")

但是由于file命令并不包含exclude这样的参数,所以无法排除某个文件,比如对于下面的目录:

我们本来可以使用

file(GLOB_RECURSE SOURCES "src/*")

获取所有文件(1,2,3,4.cpp,5.cpp)。而我们如果想要排除cpp文件的话,无法直接排除。

但是因为file命令获得的变量是一个列表,所以可以借助list命令进行排除:

list(REMOVE_ITEM <list> <value> [<value> ...])

list的REMOVE_ITEM命令表示从list中移除部分元素内容,需要注意的是不支持正则/统配符.

因此我们不能使用

list(REMOVE_ITEM SOURCES "src/*.cpp")

这样的方式。

我们仍然需要借助file命令,将"src/*.cpp"的全部文件的完整名称获取到:

file(GLOB_RECURSE REMOVE_SOURCES "src/*.cpp")

然后在使用list命令

list(REMOVE_ITEM SOURCES ${REMOVE_SOURCES})

这样,就可以排除掉不需要的文件啦。

完整cmakelist.txt如下:

cmake_minimum_required(VERSION 3.27)
project(foreachTest)variable_watch(SOURCES)
file(GLOB_RECURSE SOURCES "src/*")
file(GLOB_RECURSE REMOVE_SOURCES "*.cpp")
message("REMOVE_SOURCES:" ${REMOVE_SOURCES})
list(REMOVE_ITEM SOURCES ${REMOVE_SOURCES})

打印内容如下:

 Variable "SOURCES" was accessed using MODIFIED_ACCESS with value"E:/个人/project/cmake/test04/06/src/1;E:/个人/project/cmake/test04/06/src/2;E:/个人/project/cmake/test04/06/src/3;E:/个人/project/cmake/test04/06/src/4.cpp;E:/个人/project/cmake/test04/06/src/5.cpp".REMOVE_SOURCES:E:/个人/project/cmake/test04/06/build/CMakeFiles/3.27.0/CompilerIdCXX/CMakeCXXCompilerId.cppE:/个人/project/cmake/test04/06/src/4.cppE:/个人/project/cmake/test04/06/src/5.cpp
CMake Debug Log at CMakeLists.txt:8 (list):Variable "SOURCES" was accessed using READ_ACCESS with value"E:/个人/project/cmake/test04/06/src/1;E:/个人/project/cmake/test04/06/src/2;E:/个人/project/cmake/test04/06/src/3;E:/个人/project/cmake/test04/06/src/4.cpp;E:/个人/project/cmake/test04/06/src/5.cpp".CMake Debug Log at CMakeLists.txt:8 (list):Variable "SOURCES" was accessed using MODIFIED_ACCESS with value"E:/个人/project/cmake/test04/06/src/1;E:/个人/project/cmake/test04/06/src/2;E:/个人/project/cmake/test04/06/src/3". 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/42769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP与HTTPS的区别

面试常见问题&#xff0c;HTTPS优化总结易记版&#xff1a; 1、HSTS重定向技术&#xff1a;将http自动转换为https&#xff0c;减少301重定向 2、TLS握手优化&#xff1a;在TLS握手完成前客户端就提前向服务器发送数据 3、会话标识符&#xff1a;服务器记录下与某客户端的会…

Mac鼠标增强工具Smooze Pro

Smooze Pro是一款Mac上的鼠标手势增强工具&#xff0c;可以让用户使用鼠标手势来控制应用程序和系统功能。 它支持多种手势操作&#xff0c;包括单指、双指、三指和四指手势&#xff0c;并且可以自定义每种手势的功能。例如&#xff0c;您可以使用单指向下滑动手势来启动Expos视…

Linux 僵死进程

fork复制进程之后&#xff0c;会产生一个进程叫做子进程&#xff0c;被复制的进程就是父进程。不管父进程先结束&#xff0c;还是子进程先结束&#xff0c;对另外一个进程完全没有影响&#xff0c;父进程和子进程是两个不同的进程。 一、孤儿进程 现在有以下代码&#xff1a;…

如何计算全彩LED显示屏的像素

大屏尺寸 提供大屏的尺寸和像素点间距&#xff0c;计算大屏的分辨率是多少&#xff1f; 大屏尺寸&#xff1a;宽度>10200mm&#xff0c;高度>2025mm&#xff1b;像素点间距<1.25mm 分辨率计算 宽10200/1.258160px 高2025/1.251620px 宽&#xff1a;高 接近 5:1&a…

PHP 三元 !empty 而不是评估为真或假 可用isset()

是否可以使用速记三元来检查变量是否已设置&#xff0c;而不是是否计算结果为零或非零&#xff1f; 例如&#xff0c;我试过&#xff1a; $var 0; echo (string) $var ?: (string) false ?: 2;但由于前两个表达式的计算结果均为“0”或“false”&#xff0c;因此显示为 2。…

如何建立单元测试

快速开始 zixun-quickstart-mk3生成的项目已经配置好了基础的BaseTest,各个测试类只需要继承BaseTest就可以开始进行单元测试的编写了。 如何进行Mock 为了保证独立性和可重复执行,所有的外部依赖都需要进行Mock,SpringTest引入了Mockito作为单测Mock组件, Mickito官方文…

vue2中使用unocss,在ie11 不能正常显示unocss的颜色设置

前景 ie11 不能正常显示unocss的颜色设置&#xff1a;“–un-text-opacity: 1 !important; color: rgba(213,147,197,var(–un-text-opacity));” IE11 目前是无法支持 CSS 变量&#xff08;自定义属性&#xff09;和 rgba 中使用的 var() 函数。 为了在 IE11 中使用 UnoCSS…

前端基础(JavaScript语法)

前言&#xff1a;今天学习JavaScript的基本语法&#xff0c;包括变量、函数、对象、数组。 目录 JavaScript 变量 函数 对象 数组 JavaScript 变量 定义变量 判断语句 判断等于&#xff1a; 判断不等于&#xff1a;! if else语句 if(vavb){ console.log("…

springboot 整合swagger 入门 使用

1.前提 一定要看好版本。 Springboot ✚ Swagger各版本整理_swagger版本_qq_33334411的博客-CSDN博客 我的版本: <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</ver…

前馈神经网络正则化例子

直接看代码&#xff1a; import torch import numpy as np import random from IPython import display from matplotlib import pyplot as plt import torchvision import torchvision.transforms as transforms mnist_train torchvision.datasets.MNIST(root…

Docker:Windows container和Linux container

点击"Switch to Windows containers"菜单时&#xff1a; 提示 然后 实际上是运行&#xff1a;com.docker.admin.exe start-service

成集云 | 乐享问题邀请同步企微提醒 | 解决方案

源系统成集云目标系统 方案介绍 腾讯乐享是腾讯公司开发的一款企业社区化知识管理平台&#xff0c;它提供了包括知识库、问答、课堂、考试、活动、投票和论坛等核心应用。这个平台凝聚了腾讯10年的管理经验&#xff0c;可以满足政府、企业和学校在知识管理、学习培训、文化建…

【gitkraken】gitkraken自动更新问题

GitKraken 会自动升级&#xff01;一旦自动升级&#xff0c;你的 GitKraken 自然就不再是最后一个免费版 6.5.1 了。 在安装 GitKraken 之后&#xff0c;在你的安装目录&#xff08;C:\Users\<用户名>\AppData\Local\gitkraken&#xff09;下会有一个名为 Update.exe 的…

Linux环境变量

环境变量 一.基本概念二.常见的环境变量1.PATH&#xff1a;指令搜索路径2.HOME&#xff1a; 指定用户的主工作目录3.SHELL&#xff1a;当前Shell,它的值通常是/bin/bash 三.查看环境变量的方法四.命令行参数五.环境变量增加和删除六.本地变量 一个问题&#xff1a;我们在写一段…

Kotlin~Bridge桥接模式

概念 抽象和现实之间搭建桥梁&#xff0c;分离实现和抽象。 抽象&#xff08;What&#xff09;实现&#xff08;How&#xff09;用户可见系统正常工作的底层代码产品付款方式定义数据类型的类。处理数据存储和检索的类 角色介绍 Abstraction&#xff1a;抽象 定义抽象接口&…

《Go 语言第一课》课程学习笔记(五)

入口函数与包初始化&#xff1a;搞清 Go 程序的执行次序 main.main 函数&#xff1a;Go 应用的入口函数 Go 语言中有一个特殊的函数&#xff1a;main 包中的 main 函数&#xff0c;也就是 main.main&#xff0c;它是所有 Go 可执行程序的用户层执行逻辑的入口函数。 Go 程序在…

一起创建Vue脚手架吧

目录 一、安装Vue CLI1.1 配置 npm 淘宝镜像1.2 全局安装1.3 验证是否成功 二、创建vue_test项目2.1 cmd进入桌面2.2 创建项目2.3 运行项目2.4 查看效果 三、脚手架结构分析3.1 文件目录结构分析3.2 vscode终端打开项目 一、安装Vue CLI CLI&#xff1a;command-line interface…

日常BUG——微信小程序提交代码报错

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 在使用微信小程序开发工具进行提交代码时&#xff0c;报出如下错误&#xff1a; Invalid a…

Git提交规范指南

在开发过程中&#xff0c;Git每次提交代码&#xff0c;都需要写Commit message&#xff08;提交说明&#xff09;&#xff0c;规范的Commit message有很多好处&#xff1a; 方便快速浏览查找&#xff0c;回溯之前的工作内容可以直接从commit 生成Change log(发布时用于说明版本…

5、flink任务中可以使用哪些转换算子(Transformation)

1、什么是Flink中的转换算子 在使用 Flink DataStream API 开发流式计算任务时&#xff0c;可以将一个或多个 DataStream 转换成新的 DataStream&#xff0c;在应用程序中可以将多个数据转换算子合并成一个复杂的数据流拓扑图。 2、常用的转换算子 Flink提供了功能各异的转换算…