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.pswp.cn/news/42769.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42769.shtml
英文地址,請注明出處:http://en.pswp.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提供了功能各異的轉換算…