CMake Do‘s and Don‘ts (行為準則)

CMake Do's and Don'ts {行為準則}

  • 1. General
  • 2. Modules
  • 3. Projects
  • References

Effective Modern CMake
https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1

Do’s and Don’ts
https://cliutils.gitlab.io/modern-cmake/chapters/intro/dodonot.html

do's and don'ts = dos and don'ts

1. General

  • Use at least CMake version 3.0.0

Modern CMake is only available starting with version 3.0.0.

  • Treat CMake code like production code

CMake is code. Therefore, it should be clean. Use the same principles for CMakeLists.txt and modules as for the rest of the codebase.
把 CMake 程序視作代碼。它應該和其他的代碼一樣,是整潔并且可讀的。

  • Use lowercase function names (使用小寫的函數名)

CMake functions and macros can be called lower or upper case. Always use lower case. Upper case is for variables.
CMake 的函數和宏的名字可以定義為大寫或小寫,但是一般都使用小寫,變量名用大寫。

  • Forget the commands add_compile_options, include_directories, link_directories, link_libraries

Those commands operate on the directory level. All targets defined on that level inherit those properties. This increases the chance of hidden dependencies. Better operate on the targets directly.
這些命令在目錄級別上操作。在該級別上定義的所有目標都會繼承這些屬性。這增加了隱藏依賴項的可能性。最好直接在目標上操作。

2. Modules

  • Use modern find modules that declare exported targets

Starting with CMake 3.4, more and more find modules export targets that can be used via target_link_libraries.

3. Projects

  • Avoid custom variables in the arguments of project commands

Keep things simple. Don’t introduce unnecessary custom variables. Instead of add_library(a ${MY_HEADERS} ${MY_SOURCES}), do add_library(a b.h b.cpp).

  • Don’t use file(GLOB) in projects

CMake is a build system generator, not a build system. It evaluates the GLOB expression to a list of files when generating the build system. The build system then operates on this list of files. Therefore, the build system cannot detect that something changed in the file system.
CMake 是一個構建系統生成器,而不是構建系統。它在生成構建系統時將 GLOB 表達式求值為文件列表。然后構建系統會對此文件列表進行操作。因此,構建系統無法檢測到文件系統中發生了某些變化。

CMake cannot just forward the GLOB expression to the build system, so that the expression is evaluated when building. CMake wants to be the common denominator of the supported build systems. Not all build systems support this, so CMake cannot support it neither.
CMake 不能直接將 GLOB 表達式轉發給構建系統,以便在構建時評估該表達式。CMake 希望成為受支持的構建系統的 common denominator。并非所有構建系統都支持這一點,因此 CMake 也不能支持它。

References

[1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/
[2] Quick start guide, https://www.jetbrains.com/help/clion/clion-quick-start-guide.html
[3] 輕松上手, https://www.jetbrains.com/zh-cn/clion/features/start-your-project.html

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

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

相關文章

驗證的分類及相關工具

目錄 1.驗證方法的分類1.1動態驗證1.2.靜態驗證 2.動態驗證及相關工具2.1.電路級仿真工具2.2.邏輯仿真工具 3.靜態驗證及相關工具3.1 形式驗證工具3.2 靜態時序分析工具 SOC設計中驗證包含以下幾個方面: 驗證原始描述的正確性驗證設計的邏輯功能是否符合設計規范的要…

【HarmonyOs學習日志(14)】計算機網絡之域名系統DNS

域名系統DNS 域名系統DNS——從域名解析出IP地址 文章目錄 域名系統DNS概述域名到IP地址的解析 互聯網的域名結構命名標準 域名服務器域名的解析過程 概述 域名系統DNS(Domain Name System)是互聯網使用的命名系統,用來把便于人們使用的機器…

【Python】pandas庫---數據分析

大學畢業那年,你成了社會底層群眾里,受教育程度最高的一批人。 前言 這是我自己學習Python的第四篇博客總結。后期我會繼續把Python學習筆記開源至博客上。 上一期筆記有關Python的NumPy數據分析,沒看過的同學可以去看看:【Pyt…

【人工智能學習之HDGCN18關鍵點修改】

【人工智能學習之HDGCN18關鍵點修改】 訓練部分修改部分 訓練部分 請參考文章:【人工智能學習之HDGCN訓練自己的數據集】 修改部分 參考源碼中25關鍵點的區域劃分,我們將18關鍵點劃分為: 頭部: 鼻子左眼和左耳右眼和右耳 上肢…

ARCGIS國土超級工具集1.2更新說明

ARCGIS國土超級工具集V1.2版本,功能已增加至47 個。在V1.1的基礎上修復了若干使用時發現的BUG,新增了"矢量分割工具"菜單,同時增加及更新了了若干功能,新工具使用說明如下: 一、勘測定界工具欄更新界址點成果…

華為OD --- 流浪地球

華為OD --- 流浪地球 題目獨立實現基本思路代碼實現 其他答案實現思路代碼實現 題目 獨立實現 基本思路 1、首先把題目給出的啟動機器初始化成數組, 2、用for循環模擬每隔1s更新這個初始化數組的前后兩個機器. (源碼中的updateTimeCount函數) 3、for循環每次循環后會檢查當前…

DataOps驅動數據集成創新:Apache DolphinScheduler SeaTunnel on Amazon Web Services

引言 在數字化轉型的浪潮中,數據已成為企業最寶貴的資產之一。DataOps作為一種文化、流程和實踐的集合,旨在提高數據管道的質量和效率,從而加速數據從源頭到消費的過程。白鯨開源科技,作為DataOps領域的領先開源原生公司&#xf…

【硬件IIC】stm32單片機利用硬件IIC驅動OLED屏幕

之前操作OLED屏幕都是用GPIO模擬IIC去驅動,最近打算用硬件IIC去驅動,于是寫下這個demo,在這個過程中遇到一點小坑,記錄一下,本文章非小白教程,所以只突出踩到的坑點,文章中涉及到的OLED也是網上資料寫爛的&…

python如何自動加空格

首先,需要進行打開的一個pycharm的軟件,可進行雙擊的打開該軟件。 可以看到的是在當前的打開的文件中,格式相對較亂一下。格式不對會格式錯誤。 然后點擊菜單欄中的“code”。 在彈出的下拉菜單中選擇“reformat code”選項。 可以看到的是在…

【開源免費】基于SpringBoot+Vue.JS網上訂餐系統(JAVA畢業設計)

本文項目編號 T 018 ,文末自助獲取源碼 \color{red}{T018,文末自助獲取源碼} T018,文末自助獲取源碼 目錄 一、系統介紹二、演示錄屏三、啟動教程四、功能截圖五、文案資料5.1 選題背景5.2 國內外研究現狀5.3 可行性分析 六、核心代碼6.1 新…

串口通信和SPI通信詳解

0、背景 在現代嵌入式系統中,通信是不同模塊之間交換數據的核心。串口通信和 SPI(串行外設接口)是兩種常見的通信方式,它們各自有獨特的優勢和適用場景。 1、串口通信 1.1、串口通信概念 串口通信是一種常見的異步串行通信協議…

javase-17、API.數學相關

一、Math類 Math類提供了大量的靜態方法來便于我們實現數學計算,如求絕對值、取最大或最小值等。 https://doc.qzxdp.cn/jdk/17/zh/api/java.base/java/lang/Math.html 所在模塊:java.base所在包: java.lang static double abs(double a)…

答題考試系統v1.6.1高級版源碼分享+uniapp+搭建測試環境

一.系統介紹 一款基于FastAdminThinkPHPUniapp開發的小程序答題考試系統,支持多種試題類型、多種試題難度、練題、考試、補考模式,提供全部前后臺無加密源代碼,支持私有化部署 二.測試環境 系統環境:CentOS、 運行環境&#x…

淺談倉頡語言的優劣

倉頡語言,作為華為自研的新一代編程語言,以其高效、安全、現代化的特點,引起了廣泛的關注。 倉頡語言的優勢 高效并發 倉頡語言的一大亮點是其輕松并發的能力。它實現了輕量化用戶態線程和并發對象庫,使得高效并發變得輕松。倉頡…

Sass系統數據隔離的三種方式

1.完全獨立的數據庫 為每一個租戶單獨部署一個數據庫 優點:達到了真正的按租戶進行隔離,不同租戶之間相互沒有影響,可以針對一些特殊租戶例如大客戶做一些定制化的開發,計費相對簡單,按照資源使用進行計費。 缺點&…

FFmpeg 主要結構體剖析

FFmpeg 探索之旅 FFmpeg 主要結構體剖析 FFmpeg 探索之旅前言1、AVFormatContext2、AVCodecContext3、AVCodec4、AVStream5、AVPacket6、AVFrame7、AVCodecParameters7、SwsContext8、AVIOContext9、AVRational 總結 前言 嘿,各位小伙伴!在如今這個多媒…

經典電荷泵/Charge pump——1998.JSSC

電路結構 工作原理 M3 and M4 are the series switches, and M5, M6 switch to the highest voltage. If M5 and M6 are missing, having a large capacitor is of absolute necessity, because must always stay between 2 Vin and 2Vin - Uj to avoid switching on the vert…

Swin transformer 論文閱讀記錄 代碼分析

該篇文章,是我解析 Swin transformer 論文原理(結合pytorch版本代碼)所記,圖片來源于源paper或其他相應博客。 代碼也非原始代碼,而是從代碼里摘出來的片段,配上簡單數據,以便理解。 當然&…

GPT-Omni 與 Mini-Omni2:創新與性能的結合

近年來,隨著人工智能技術的飛速發展,各種模型和平臺應運而生,以滿足從個人用戶到企業級應用的多樣化需求。在這一領域,GPT-Omni 和 Mini-Omni2 是兩款備受矚目的技術產品,它們憑借獨特的設計和強大的功能,在…

龍迅#LT7911E適用于EDP/DP/TPYE-C轉MIPIDSI應用,支持圖像處理功能,內置I2C,主應用副屏顯示,投屏領域!

1. 描述 LT7911E 是一款高性能 eDP 轉 MIPI D-PHY 轉換器,旨在將 eDP 源連接到 MIPI 顯示面板。 LT7911E 集成了一個符合 eDP1.4 標準的接收器,支持 1.62Gbps 至 5.67Gbps 的輸入數據,以 270Mbps 的遞增步長,以及一個 2 端口 D…