簡體   English   中英

我如何確保在我的 C++ 程序中所需的頭文件安裝在用戶的機器上?

[英]How would I make sure that the needed headers required in my C++ program are installed on the user's machine?

我有一個使用流行的Boost庫的 C++ 項目。 問題是,如果有人下載我的代碼 Github 並嘗試構建它,除非他們安裝了 Boost,否則它將無法工作,這可能會帶來不便。 我只是想知道我將如何確保用戶可以訪問這些標頭,以便他們可以自己構建應用程序。 我是否必須將它們復制到目錄中的單獨文件夾中? 有更好的解決方案嗎?

謝謝

關於如何管理依賴項有很多選擇。 根據我的經驗,許多平台都定義了自己的傳統方式。 例如,在 iOS 開發人員使用 CocoaPods 或 SwiftPackages(有時還有 Carthage)。 對於 Android 應用程序,開發人員通常在 Gradle-build 腳本的dependencies項塊中定義依賴項(本質上是從遠程存儲庫獲取它們)。

沒有必要的行業標准,但其他開發人員通常會發現一些一致的 .

就我而言,在 C++ 世界中,依賴項預計將通過CMake進行管理。 我不會說 CMake 本身定義了管理依賴項的傳統方式(這樣做的方法遠不止一種),但每個人都期望的部分是,當您的 CMake 腳本成功完成時,它已經設置了所有依賴項。 在通過 CMake 管理依賴項時,您可以使用以下幾個選項:

  • find_package - 最普遍的方式。 因此,此命令最終應該包含在您的 cmake 腳本中配置的包含目錄和庫目標(您鏈接自己的項目)。 老實說,我不是這個命令的忠實擁護者,因為它實際上取決於主機的配置方式,並且您應該編寫額外的Find<Library_name>.cmake文件,您可以在其中提供有關 CMake 如何找到給定的圖書館。
  • 將您的依賴項作為 git 子模塊添加到項目的子目錄中,並在CMakeLists.txt中對這些依賴項使用add_subdirectory - 我的首選方式。 首先,我喜歡它,因為它具有高度的可移植性,您不會期望主機以任何特定方式進行配置,其次,它不會將依賴項傳播到項目目錄之外。 最后但並非最不重要的一點是,子模塊保留使用的存儲庫的 state,因此克隆您的代碼的每個人都將獲得與您使用的依賴項完全相同的版本,同時他們有可能對其進行更新(將更新的版本拉為需要)。
  • Package 管理器(例如Conan - 我認為您已經猜到了,C++ 中的依賴管理對新手不是很友好,並且仍然有一些新的選項正在開發中來解決這個問題。 柯南就是這樣的選擇之一,它與 CMake 兼容(但還不是很普遍)。

由於 CMake 的靈活性,您還可以添加任何中間步驟來輕松安裝依賴項,包括但不限於自動 git 子模塊拉取和更新,或安裝一些缺少的工具。

暫無
暫無

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

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