C++中如何管理第三方依賴_包管理工具使用

c++++中主流的第三方依賴管理工具包括vcpkg、conan和cmake fetchcontent。①vcpkg簡單易用,適合快速上手,安裝后通過命令安裝依賴并在cmake中配置toolchain文件即可使用;②conan功能強大且配置靈活,支持跨平臺,通過conanfile定義依賴并生成cmake配置;③cmake fetchcontent集成度高,無需額外工具,直接在cmakelists.txt中聲明依賴源碼倉庫即可引入第三方庫。選擇時應根據(jù)項目復雜度、配置需求及是否希望避免額外工具進行權衡。

C++中如何管理第三方依賴_包管理工具使用

c++中的第三方依賴管理,說白了就是解決“我的代碼要用到別人的代碼,怎么才能方便地把別人的代碼弄過來,并且保證版本正確,不和其他依賴沖突”的問題。包管理工具就是干這個的。

C++中如何管理第三方依賴_包管理工具使用

vcpkg、Conan、CMake FetchContent,這三個算是比較主流的選擇。vcpkg 用起來簡單,Conan 功能強大,CMake FetchContent 集成度高。

C++中如何管理第三方依賴_包管理工具使用

解決方案

vcpkg:簡單易用,上手快

立即學習C++免費學習筆記(深入)”;

C++中如何管理第三方依賴_包管理工具使用

vcpkg 是 microsoft 開發(fā)的 C++ 包管理器,它的優(yōu)點是簡單易用,上手快。

  1. 安裝 vcpkg:

    先從 gitHub 上 clone vcpkg 倉庫:

    git clone https://github.com/microsoft/vcpkg.git

    然后運行 bootstrap 腳本:

    ./vcpkg/bootstrap-vcpkg.sh # linux/macos ./vcpkg/bootstrap-vcpkg.bat # windows
  2. 安裝依賴:

    比如,要安裝 Boost 庫,只需要執(zhí)行:

    ./vcpkg install boost

    vcpkg 會自動下載、編譯 Boost 庫,并把它安裝到 vcpkg 的安裝目錄下。

  3. 在 CMake 中使用 vcpkg:

    在 CMakeLists.txt 文件中,添加以下內容:

    set(CMAKE_TOOLCHaiN_FILE "[vcpkg_root]/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file")

    把 [vcpkg_root] 替換成 vcpkg 的安裝目錄。

    然后,就可以在 CMakeLists.txt 中使用 find_package 命令來查找 vcpkg 安裝的庫了:

    find_package(Boost REQUIRED COMPONENTS system filesystem) if(Boost_FOUND)     include_directories(${Boost_INCLUDE_DIRS})     target_link_libraries(my_project Boost::boost) endif()

    這樣,CMake 就會自動找到 Boost 庫,并把它鏈接到你的項目中。

Conan:功能強大,配置靈活

Conan 是一個跨平臺的 C++ 包管理器,它的優(yōu)點是功能強大,配置靈活。

  1. 安裝 Conan:

    pip install conan

    Conan 是用 python 寫的,所以需要先安裝 Python 和 pip。

  2. 創(chuàng)建 conanfile.txt 或 conanfile.py:

    在你的項目根目錄下,創(chuàng)建一個 conanfile.txt 或 conanfile.py 文件,用來描述你的項目依賴。

    conanfile.txt 的例子:

    [requires] boost/1.76.0  [generators] cmake

    conanfile.py 的例子:

    from conan import ConanFile from conan.tools.cmake import CMakeToolchain, CMake  class MyProjectConan(ConanFile):     settings = "os", "compiler", "build_type", "arch"     requires = "boost/1.76.0"     generators = "CMakeToolchain", "CMakeDeps"      def layout(self):         self.folders.source = "src"      def build(self):         cmake = CMake(self)         cmake.configure()         cmake.build()
  3. 安裝依賴:

    conan install . --build missing

    Conan 會根據(jù) conanfile.txt 或 conanfile.py 文件,下載、編譯依賴,并生成 CMake 需要的配置文件。

  4. 在 CMake 中使用 Conan:

    在 CMakeLists.txt 文件中,添加以下內容:

    include(${CMAKE_BINARY_DIR}/conan_toolchain.cmake)

    然后,就可以像使用普通的 CMake 項目一樣,使用 find_package 命令來查找 Conan 安裝的庫了。

CMake FetchContent:集成度高,無需額外工具

CMake FetchContent 是 CMake 內置的模塊,它可以直接從 Git 倉庫或其他 URL 下載依賴,并把它添加到你的項目中。它的優(yōu)點是集成度高,無需額外工具。

  1. 在 CMakeLists.txt 中使用 FetchContent:

    include(FetchContent)  FetchContent_Declare(     googletest     GIT_REPOSITORY https://github.com/google/googletest.git     GIT_TAG        v1.11.0 )  FetchContent_MakeAvailable(googletest)  include_directories(${googletest_SOURCE_DIR}/googletest/include)  target_link_libraries(my_project gtest)

    這段代碼會從 GitHub 上下載 googletest 庫,并把它添加到你的項目中。

如何選擇合適的包管理工具?

這取決于你的項目需求和個人偏好。

  • 如果你的項目比較簡單,或者你只是想快速上手,那么 vcpkg 是一個不錯的選擇。 它的優(yōu)點是簡單易用,上手快,而且 Microsoft 官方支持,社區(qū)活躍。
  • 如果你的項目比較復雜,需要更靈活的配置,那么 Conan 是一個更好的選擇。 它的優(yōu)點是功能強大,配置靈活,支持多種構建系統(tǒng)和平臺。
  • 如果你的項目已經(jīng)使用了 CMake,并且不想引入額外的工具,那么 CMake FetchContent 是一個不錯的選擇。 它的優(yōu)點是集成度高,無需額外工具,但是功能相對簡單,不如 vcpkg 和 Conan 強大。

包管理工具如何解決依賴沖突問題?

包管理工具通常會使用一些技術來解決依賴沖突問題,比如:

  • 版本控制: 包管理工具會記錄每個依賴的版本號,確保每個項目使用的都是正確的版本。
  • 依賴圖: 包管理工具會構建一個依賴圖,記錄每個依賴之間的關系,從而避免循環(huán)依賴和版本沖突。
  • 沖突解決: 當出現(xiàn)依賴沖突時,包管理工具會提供一些工具來幫助你解決沖突,比如選擇不同的版本,或者排除某些依賴。

除了 vcpkg、Conan 和 CMake FetchContent,還有其他的 C++ 包管理工具嗎?

還有一些其他的 C++ 包管理工具,比如:

  • Hunter: Hunter 是一個基于 CMake 的包管理器,它的優(yōu)點是易于使用,而且可以自動生成 CMake 配置文件。
  • CPM: CPM 是一個 CMake 模塊,它可以從 GitHub 上下載依賴,并把它添加到你的項目中。
  • Buckaroo: Buckaroo 是一個 C++ 包管理器,它的優(yōu)點是速度快,而且支持多種構建系統(tǒng)和平臺。

但是,這些包管理工具的流行程度不如 vcpkg、Conan 和 CMake FetchContent,所以使用的人也比較少。

選擇哪種包管理工具,最終還是取決于你的項目需求和個人偏好。 關鍵在于選擇一個能夠簡化依賴管理流程,并提高開發(fā)效率的工具。

以上就是C++中如何管理第三方依賴_包管理

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享