簡體   English   中英

現代 CMake:有沒有辦法使用 CMakePresets.json 構建外部項目?

[英]Modern CMake: is there a way to build external projects using a CMakePresets.json?

免責聲明:我對 C++ 開發和處理更大的項目比較陌生,所以這可能是一種錯誤的方法或工具,所以我對不同的想法非常開放。

我希望能夠提供一種包,它是針對不同平台的預構建庫/二進制文件的集合,與我們的其他軟件一起使用。

我需要能夠在不破壞任何內容的情況下獨立添加或刪除目標。 (例如,添加新庫應該像創建新目錄libname並在其中配置 CMakePresets.json 一樣簡單)

理想情況下,我的想法是:

  • 為每個依賴項創建一個帶有構建指令的存儲庫
  • 有一個 CI/CD 管道構建我們需要的所有不同版本(linux x64、linux ARM、windows)
  • 提供下載特定版本的平台

所以,我想到的是這樣的:

├── A
│   └── CMakePresets.txt
├── B
│   └── CMakePresets.txt
├── C
│   └── CMakePresets.txt
└── CMakeLists.txt (or something like a python script)

通過在根目錄中使用腳本,AB 和 C 是我的依賴項以及我想要構建它們的方式。

我花了一些時間試圖找出一種干凈且跨平台的方法,但無濟於事。 由於 FetchContent / ExternalProject_Add 命令,我想使用 CMakeLists.txt 但還沒有真正找到一種方法來傳遞不乏味的變量。

這非常令人沮喪,因為這看起來應該是相對常見的,但我覺得我錯過了一些東西......

也許我應該為某些任務使用類似 Python 腳本的東西(例如克隆源,復制新目錄中的預設並從那里構建)但我真的很喜歡用 CMake 做所有事情的想法,考慮到它處理一個我想要的很多東西(克隆特定的 git 標簽等)

謝謝

您剛剛描述了柯南的目標和方法。 它與 CMake 接口良好,並使用您的“構建配方”方法。 你和柯南認識到 C++ 包本質上不同於 Python 或 Javascript,因為它們因編譯器版本、libc 版本、構建配置等而有無窮無盡的變化。解決方案是提供構建指令和緩存多層構建結果:本地機器、私有服務器、公共服務器。

結果是您指定具有所需版本的包。 如果有任何與您指定的配置匹配的包將被下載,否則它將被構建和緩存。 通過正確的 CI 設置,您可以將結果上傳到您的內部服務器,以便在大多數情況下,必要的包都是預先構建的。

上次我嘗試它時,我遇到了一些問題,比如傳遞依賴,你可能會發現自己為你需要的所有包維護自己的構建配方的內部分支,這樣你就可以控制這些傳遞依賴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM