CMake使用file(GLOB ...)需要注意的問題

文章目錄

  • 基本語法
  • 使用例子
  • 潛在的問題
  • 大型項目中推薦的用法

file(GLOB ...) 命令用于獲取匹配指定模式的文件列表。在 CMake 中,file(GLOB ...) 命令的一種常見用法是用于收集源文件列表,例如 C++ 源文件(.cpp)和 C 源文件(.c)。然而,需要注意一些潛在的問題,特別是在大型項目中。

基本語法

file(GLOB variable [LIST_DIRECTORIES true|false] [RELATIVE path] [CONFIGURE_DEPENDS] [globbingexpressions]...)

其中:

  • variable 是一個存儲匹配文件列表的變量名。
  • LIST_DIRECTORIES 是一個可選的參數,用于指定是否包含目錄,默認為 true
  • RELATIVE path 是一個可選的參數,用于指定相對路徑,文件匹配將從這個相對路徑開始。
  • CONFIGURE_DEPENDS 是一個可選的參數,用于指定是否在構建時重新計算文件依賴關系。

使用例子

以下是一個使用 file(GLOB ...) 命令獲取 C++ 和 C 源文件列表的例子:

file(GLOB CPP_SOURCES *.cpp)
file(GLOB C_SOURCES *.c)# 將 C++ 和 C 源文件合并到一個變量中
set(SOURCES ${CPP_SOURCES} ${C_SOURCES})# 在 add_executable 或 add_library 中使用這個變量
add_executable(my_executable ${SOURCES})

潛在的問題

雖然使用 file(GLOB ...) 簡便,但有一些潛在的問題:

  1. 不會自動檢測新增或刪除的文件: 使用 file(GLOB ...) 時,CMake 不會自動檢測源文件的變化,因此在添加或刪除源文件時,需要手動重新運行 CMake。

  2. 不建議在大型項目中使用: 對于大型項目,由于可能包含大量的源文件,使用 file(GLOB ...) 可能會導致性能問題。

大型項目中推薦的用法

在大型項目中,推薦使用顯式列出源文件的方式,例如:

set(SOURCESsrc/file1.cppsrc/file2.cppsrc/file3.cpp# ...src/main.cpp
)add_executable(my_executable ${SOURCES})

這樣可以更明確地指定源文件,避免潛在的問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167222.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167222.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167222.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

html頁面加載json數據,在html中顯示JSON數據的方法

html頁面加載json數據,在html中顯示JSON數據的方法 export const mixin {methods: {syntaxHighlight(json) {if (typeof json ! string) {json JSON.stringify(json, undefined, 2);}json json.replace(/&/g, &).replace(/</g, <).replace(/>/g, >);re…

實例分割12篇頂會論文及代碼合集,含2023最新

同學們&#xff0c;你們覺得視覺經典四個任務中哪個最難&#xff1f;我個人覺得是實例分割。 因為它既具備語義分割的特點&#xff0c;需要做到像素層面上的分類&#xff0c;也具備目標檢測的一部分特點&#xff0c;即需要定位出不同實例&#xff0c;即使它們是同一種類。 但…

LangChain的函數,工具和代理(一):OpenAI的函數調用

一、什么是函數調用功能 幾個月前OpenAI官方發布了其API的函數調用功能(Function calling), 在 API 調用中&#xff0c;您可以描述函數&#xff0c;并讓模型智能地選擇輸出包含調用一個或多個函數的參數的 JSON 對象。API函數“ChatCompletion” 雖然不會實際調用該函數&#…

C語言變量和常量

變量和常量 標識符 在計算機高級語言中&#xff0c;用來對變量、符號常量、函數、數組、類型等命名的有效字符序列統稱為標識符&#xff08;identifier&#xff09;。 C語言規定標識符&#xff1a; 只能由字母&#xff0c;數字和下劃線組成。不能以數字開頭。字母區分大小寫…

一站式企業快遞管理平臺使用教程

因公寄件在企業中重要性的提升&#xff0c;催生出了企業快遞管理平臺。為什么這么說呢&#xff1f; 隨著經濟和快遞行業的發展&#xff0c;因公寄件在企業中成了一件“常事”&#xff0c;寄文件合同、發票、節假日慰問品、樣品等等&#xff0c;這種情況之下&#xff0c;因公寄件…

Vue3 設置點擊后滾動條移動到固定的位置

需求&#xff1a; 點擊不通過按鈕&#xff0c;顯示紅框中表單&#xff0c;且滾動條滾動到底部 &#xff08;顯示紅框中表單默認不顯示&#xff09; <el-button click"onApprovalPass">不通過</el-button> <div class"item" v-if"app…

vue打包優化

vue.config.js文件中 module.exports defineConfig({ productionSourceMap: false,//去掉mapjs文件 });

pwn:[SWPUCTF 2021 新生賽]nc簽到

題目 linux環境下顯示為 配合題目的下載附件&#xff0c;發現過濾了一些&#xff0c;一旦輸入這些會自動關閉程序 ls被過濾了&#xff0c;可以使用l\s cat和空格都被過濾了&#xff0c;cat可以換成c\at ,空格可以換成$IFS$9

<HarmonyOS第一課>1·運行Hello World【課后考核】

【習題】運行Hello World工程 判斷題 1.DevEco Studio是開發HarmonyOS應用的一站式集成開發環境。 正確(True) 2.main_pages.json存放頁面page路徑配置信息。 正確(True) 單選題 1.在stage模型中&#xff0c;下列配置文件屬于AppScope文件夾的是&#xff1f;&#xff08;…

Youtube0播放?運營教你需要的技巧、策略與工具!

對于有跨境意向的內容創作者或者品牌企業來說&#xff0c;YouTube是因其巨大的潛在受眾群和商業價值成為最值得投入變現與營銷計劃的平臺。 據統計&#xff0c;98% 的美國人每月訪問 YouTube&#xff0c;近三分之二的人每天訪問。但是&#xff0c;YouTube還遠未達到過度飽和的…

酵母雙雜交服務專題(一)

酵母雙雜交系統是一種在酵母這種真核生物模型中執行的實驗方法&#xff0c;用于探索活細胞內部蛋白質間的相互作用。這種技術能夠敏感地捕捉蛋白質間的細微和短暫相互作用&#xff0c;通過檢測報告基因的表達產物來實現。作為一種高度靈敏的技術&#xff0c;酵母雙雜交系統被廣…

Spring Cloud LoadBalancer 簡單介紹與實戰

前言 本文為SpringCloud的學習筆記&#xff0c;如有錯誤&#xff0c;希望各位高手能指出&#xff0c;主要介紹SpringCloudLoadBalancer的基本概念和實戰 文章目錄 前言什么是LoadBalancer負載均衡分類服務端負載均衡客戶端負載均衡服務端負載均衡和客戶端負載均衡的優缺點 常見…

評測|PolarDB MySQL 版 Serverless

評測&#xff5c;PolarDB MySQL 版 Serverless 目錄 一、測試背景 1.1、云原生數據庫 PolarDB Serverless新架構概念 1.2、Serverless資源彈性擴縮觸發條件 二、PolarDB的Serverless能力與同類型產品進行對比 三、動態彈性升降資源的能力測試 3.1、測試資源 3.2、測試一…

ubuntu22.04在線安裝redis,可選擇版本

安裝腳本7.0.5版本 在線安裝腳本&#xff0c;默認版本號是7.0.5&#xff0c;可以根據需要選擇需要的版本進行下載編譯安裝 sudo apt-get install gcc -y sudo apt-get install pkg-config -y sudo apt-get install build-essential -y#安裝redis rm -rf ./tmp.log systemctl …

freeRTOS下載鏈接(sourceForge)

FreeRTOS Real Time Kernel (RTOS) download | SourceForge.net 文件名&#xff1a;FreeRTOSv202212.00.exe 雙擊后會自動變成這個樣子的&#xff1a; 文件夾大小&#xff1a;506M 可以看到跟那個教程里面的文件結構是一模一樣的&#xff0c;所以很可能是同一個最新版本的文件…

Linux(Centos)上使用crontab實現定時任務(定時執行腳本)

場景 Windows中通過bat定時執行命令和mysqldump實現數據庫備份&#xff1a; Windows中通過bat定時執行命令和mysqldump實現數據庫備份_mysqldump bat-CSDN博客 上面講windows中使用bat實現定時任務的方式&#xff0c;如果是在linux上可以通過crontab實現。 cron是服務名稱。…

高斯DB數據庫添加字段并添加字段注釋

個人網站 公眾號小肖學數據分析 可以使用以下SQL語句向高斯DB數據庫添加字段并添加字段注釋&#xff1a; ALTER TABLE 表名 ADD COLUMN 列名 數據類型 COMMENT 字段注釋; "表名"替換為要添加字段的表名&#xff0c;"列名"替換為要添加的字段名&#xf…

怎樣提升倫敦銀買賣技巧?

如果投資者想提升倫敦銀的買賣技巧&#xff0c;可以學習一些有用的技術分析方法。所謂技術分析&#xff0c;就是通過對行情過往價格和相關交易數據進行收集&#xff0c;用圖表的方式解讀白銀市場&#xff0c;進而預測行情未來主線走勢、判斷價格細節變化、尋找重要支撐點阻力點…

Linux系統常用的組合命令

1. 管道&#xff08;|&#xff09;&#xff1a;將一個命令的輸出傳遞給另一個命令作為輸入。例如&#xff1a; command1 | command2 在這個命令中&#xff0c;command1 的輸出會作為 command2 的輸入,直接將一個命令的輸出傳遞給另一個命令進行處理. 你可以使用 grep 來查找關…

TikTok Shop 與英國皇家郵政合作:為賣家提供“Click and Drop”服務

11 月 21 日&#xff0c;TikTok Shop 宣布與皇家郵政 建立新的合作伙伴關系 &#xff0c;為平臺上的商家推出 Click & Drop。此次合作將使各種規模的商家能夠通過將皇家郵政的 Click & Drop 與其 TikTok Shop 帳戶集成來改善其履行體驗并更有效地發出訂單&#xff0c;…