CMake的INSTALL FILES和INSTALL DIRECTORY有什么區別


在 CMake 中,install() 命令用于安裝構建的目標文件、頭文件、庫等到指定的目標路徑。install(FILES ...)install(DIRECTORY ...) 都是 install() 命令的具體用法,它們的功能和適用場景不同。

以下是兩者的詳細區別和用法說明:


1. install(FILES ...)

功能

  • 直接安裝指定的文件到目標路徑。
  • 適用于安裝單個文件(如頭文件、配置文件等)。

語法

install(FILES file1 file2 ... DESTINATION target_directory [OPTIONAL_ARGUMENTS])

參數說明

  • FILES: 需要安裝的文件列表。
  • DESTINATION: 安裝的目標路徑,相對于 CMAKE_INSTALL_PREFIX
  • 可選參數:
    • PERMISSIONS: 指定文件權限(如 OWNER_READ, OWNER_WRITE 等)。
    • RENAME: 重命名文件時使用。

示例

# 將頭文件安裝到目標 include 目錄
install(FILES header1.h header2.h DESTINATION include)# 將文件安裝到目標路徑并設置權限
install(FILES config.json DESTINATION etcPERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
)

2. install(DIRECTORY ...)

功能

  • 遞歸安裝整個目錄的內容到目標路徑。
  • 適用于安裝文件夾及其子文件夾中的所有內容。

語法

install(DIRECTORY dir1 dir2 ... DESTINATION target_directory [OPTIONAL_ARGUMENTS])

參數說明

  • DIRECTORY: 需要安裝的目錄列表。
  • DESTINATION: 安裝的目標路徑,相對于 CMAKE_INSTALL_PREFIX
  • 可選參數:
    • FILES_MATCHING: 只安裝符合指定模式的文件。
    • PATTERNREGEX: 用于過濾文件或目錄的匹配模式。
    • EXCLUDE: 排除匹配的文件或目錄。

示例

# 將目錄的內容遞歸安裝到目標路徑
install(DIRECTORY my_include/ DESTINATION include)# 只安裝特定擴展名的文件(如 .h 文件)
install(DIRECTORY my_include/ DESTINATION includeFILES_MATCHING PATTERN "*.h"
)# 排除特定目錄
install(DIRECTORY my_project/ DESTINATION projectPATTERN "build" EXCLUDE
)

主要區別

特性install(FILES)install(DIRECTORY)
用途安裝指定的單個或多個文件安裝整個目錄及其內容
遞歸處理子目錄不支持支持遞歸安裝目錄及其子目錄
支持過濾和模式匹配不支持支持通過 PATTERNREGEX 進行過濾
適用場景安裝頭文件、配置文件、庫文件等安裝包含多個文件或目錄的資源(如源碼、數據、文檔等)
排除內容不支持支持使用 EXCLUDE 排除匹配的文件或目錄

使用建議

  • install(FILES): 當需要安裝少量的特定文件時使用。
  • install(DIRECTORY): 當需要遞歸安裝整個目錄(如頭文件目錄、資源目錄)時使用,尤其是需要過濾或排除特定文件時。

示例:結合使用 FILESDIRECTORY

# 將單個文件安裝到配置目錄
install(FILES config.json DESTINATION etc)# 將整個頭文件目錄安裝到目標 include 目錄
install(DIRECTORY my_include/ DESTINATION include)# 僅安裝特定文件類型(如 .h 和 .cpp 文件),排除子目錄中的文件
install(DIRECTORY my_src/ DESTINATION srcFILES_MATCHING PATTERN "*.h" PATTERN "*.cpp"PATTERN "tests" EXCLUDE
)

總結

  • 使用 install(FILES) 直接安裝單個或多個文件,適合靜態文件或非遞歸安裝場景。
  • 使用 install(DIRECTORY) 遞歸安裝整個目錄,適合安裝復雜的目錄結構或需要文件過濾的場景。

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

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

相關文章

主流網絡安全產品

目前市場上也出現了品類豐富的安全產品,如“防火墻、抗D、負載均衡、WAF、數據庫審計、漏掃、網頁防篡改、上網行為管理、堡壘機等”這些產品由于功能不同在網絡中部署的位置也有區別。下面來簡單聊一下每類產品的功能和部署位置。 (1)防火墻…

利用git上傳項目到GitHub

GitHub是基于git實現的代碼托管。git是目前最好用的版本控制系統了,非常受歡迎,比之svn更好。 GitHub可以免費使用,并且快速穩定。 利用GitHub,你可以將項目存檔,與其他人分享交流,并讓其他開發者幫助你一…

《Vue3實戰教程》13:Vue3偵聽器

如果您有疑問,請觀看視頻教程《Vue3實戰教程》 偵聽器? 基本示例? 計算屬性允許我們聲明性地計算衍生值。然而在有些情況下,我們需要在狀態變化時執行一些“副作用”:例如更改 DOM,或是根據異步操作的結果去修改另一處的狀態。…

uboot 打開log 的 方法

uboot 版本 commit f919c3a889f0ec7d63a48b5d0ed064386b0980bd (HEAD -> v2024.10, tag: v2024.10) Author: Tom Rini <trinikonsulko.com> Date: Mon Oct 7 08:54:35 2024 -0600 Prepare v2024.10 Signed-off-by: Tom Rini <trinikonsulko.com> 開啟的選項…

VSCode 搭建Python編程環境 2024新版圖文安裝教程(Python環境搭建+VSCode安裝+運行測試+背景圖設置)

名人說&#xff1a;一點浩然氣&#xff0c;千里快哉風。—— 蘇軾《水調歌頭》 創作者&#xff1a;Code_流蘇(CSDN) 目錄 一、Python環境安裝二、VScode下載及安裝三、VSCode配置Python環境四、運行測試五、背景圖設置 很高興你打開了這篇博客&#xff0c;更多詳細的安裝教程&…

Unity常用面試問題

GC針對的誰 new對象的時候&#xff0c;產生新對象 GC是發生在什么時候 主動調collect接口以及內存分配不足的時候 如何避免gc 別new對象 GC的過程&#xff0c;為什么耗時 每一次GC會經歷以下過程&#xff0c;堆上的對象越多&#xff0c;對象的引用越多&#xff0c;意味著…

在Linux上將 `.sh` 腳本、`.jar` 包或其他腳本文件添加到開機自啟動

在Linux上將 .sh 腳本、.jar 包或其他腳本文件添加到開機自啟動 在Linux環境中&#xff0c;有時需要將一些程序、腳本或應用程序設置為開機時自動啟動。這對于那些需要在系統啟動時啟動的服務或應用非常有用。本文將介紹如何將 .sh 腳本、.jar 包或其他腳本文件添加到Linux系統…

Git使用步驟

Git 是一個分布式版本控制系統&#xff0c;廣泛用于軟件開發和其他需要跟蹤文件變更的項目。以下是 Git 的基本使用方法和一些常用命令的詳細說明。 安裝 Git 在大多數操作系統上&#xff0c;你可以通過包管理器安裝 Git&#xff1a; Windows: 下載并安裝 Git for Windows。…

詳細指南:在Ubuntu 20.04上安裝和配置Orbbec SDK及USB設備權限

詳細指南&#xff1a;在Ubuntu 20.04上安裝和配置Orbbec SDK及USB設備權限 在Ubuntu 20.04上安裝和配置Orbbec SDK以及進行USB設備的權限配置和調整USBFS緩存大小&#xff0c;涉及到一系列系統配置和環境準備步驟。以下是詳細的步驟說明&#xff0c;以確保準確和高效地設置開發…

【GCC】2015: draft-alvestrand-rmcat-congestion-03 機器翻譯

騰訊云的一個分析,明顯是看了這個論文和草案的 : 最新的是應該是這個 A Google Congestion Control Algorithm for Real-Time Communication draft-ietf-rmcat-gcc-02 下面的這個應該過期了: draft-alvestrand-rmcat-congestion-03

計算機網絡技術基礎:5.數據通信系統

一、數據通信的基本概念 1.信息 信息是對客觀事物的運動狀態和存在形式的反映&#xff0c;可以是客觀事實的形態、大小、結構、性能等描述&#xff0c;也可以是客觀事物與外部之間的聯系。信息的載體可以是數字、文字、語音、圖形和圖像等。計算機及其外圍設備產生和交換的信息…

STM32中ADC模數轉換器

一、ADC簡介 ADC模擬-數字轉換器 ADC可以將引腳連續變化的模擬電壓轉換為內存中存儲的數字變量&#xff0c;建立模擬電路到數字電路的橋梁 12位逐次逼近型ADC&#xff0c;1us轉換時間 輸入電壓范圍&#xff1a; 0~3.3V&#xff0c;轉換結果范圍&#xff1a;0~4095 18個輸入…

醫療領域的網絡安全預防:保障患者隱私與醫療數據安全

醫療領域的網絡安全預防&#xff1a;保障患者隱私與醫療數據安全 隨著信息技術的不斷發展和醫療行業的數字化轉型&#xff0c;網絡安全在醫療領域變得愈加重要。醫療行業處理著大量的敏感數據&#xff0c;包括患者的個人信息、醫療記錄、診療方案等&#xff0c;這些數據一旦被…

【數字圖像處理】期末綜合知識點總結 ver1,灰度圖像,圖像增強,平滑濾波,銳化濾波,圖像復原,圖像壓縮

關注作者了解更多 我的其他CSDN專欄 過程控制系統 工程測試技術 虛擬儀器技術 可編程控制器 工業現場總線 數字圖像處理 智能控制 傳感器技術 嵌入式系統 復變函數與積分變換 單片機原理 線性代數 大學物理 熱工與工程流體力學 數字信號處理 光電融合集成電路…

.NET 技術 | 調用系統API創建Windows服務

01閱讀須知 此文所提供的信息只為網絡安全人員對自己所負責的網站、服務器等&#xff08;包括但不限于&#xff09;進行檢測或維護參考&#xff0c;未經授權請勿利用文章中的技術資料對任何計算機系統進行入侵操作。利用此文所提供的信息而造成的直接或間接后果和損失&#xf…

【Qt】QWidget中的常見屬性及其功能(二)

目錄 六、windowOpacity 例子&#xff1a; 七、cursor 例子&#xff1a; 八、font 九、toolTip 例子&#xff1a; 十、focusPolicy 例子&#xff1a; 十一、styleSheet 計算機中的顏色表示 例子&#xff1a; 六、windowOpacity opacity是不透明度的意思。 用于設…

Elasticsearch02-安裝7.x

零、文章目錄 Elasticsearch02-安裝7.x 1、Windows安裝Elasticsearch &#xff08;1&#xff09;JDK安裝 Elasticsearch是基于java開發的&#xff0c;所以需要安裝JDK。我們安裝的Elasticsearch版本是7.15&#xff0c;對應JDK至少1.8版本以上。也可以不安裝jdk&#xff0c;…

php學習資料分享

php學習資料分享&#xff1a;夸克網盤分享

UWA Gears V1.0.5|新增Thread Load指標

UWA Gears 是UWA最新發布的無SDK性能分析工具。針對移動平臺&#xff0c;提供了實時監測和截幀分析功能&#xff0c;幫助您精準定位性能熱點&#xff0c;提升應用的整體表現。 本次版本更新主要是新增了Thread Load指標&#xff0c;幫助大家更直觀地了解多線程任務的負載分布情…

IAR中如何而將定義的數組放在指定的位置

在keil中可以使用下面的方法將數組定義到指定的位置 uint8_t g_usart_rx_buf[USART_REC_LEN] __attribute__ ((at(0X20001000)));但是這個方法在IAR中是用不了的,通過網上查找各種資料&#xff0c;發現了兩種可用的方法。我這里測試的單片機是stm32f103c8t6&#xff0c;其他單…