Trang tài liệu
Khóa học C++ nền tảng
Chương 18. Quản lý gói
Conan

Conan

Conan là trình quản lý gói phổ biến dành cho ngôn ngữ C và C++ và được thiết kế đa nền tảng, có thể mở rộng và dễ sử dụng. Nó cho phép các nhà phát triển khai báo, quản lý và tìm nạp các phụ thuộc trong khi tự động hóa quá trình xây dựng. Conan hỗ trợ nhiều hệ thống xây dựng khác nhau, chẳng hạn như CMake, Visual Studio, MSBuild, v.v.

Cài đặt

Để cài đặt Conan, bạn có thể sử dụng pip, trình quản lý gói Python:

pip install conan

Sử dụng cơ bản

  • Tạo tệp conanfile.txt trong thư mục gốc dự án của bạn, chỉ định các phụ thuộc bạn cần cho dự án của mình:
[requires]
boost/1.75.0
 
[generators]
cmake
  • Chạy lệnh conan install để tìm nạp và xây dựng các phụ thuộc cần thiết:
mkdir build && cd build
conan install ..
  • Bây giờ hãy xây dựng dự án của bạn bằng hệ thống xây dựng của bạn, ví dụ CMake:
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .

Tạo gói

Để tạo một gói trong Conan, bạn cần viết tệp conanfile.py với thông tin gói và hướng dẫn xây dựng.

Đây là một ví dụ:

from conans import ConanFile, CMake
 
class MyLibraryConan(ConanFile):
    name = "MyLibrary"
    version = "0.1"
    license = "MIT"
    url = "https://github.com/username/mylibrary"
    description = "A simple example library"
    settings = "os", "compiler", "build_type", "arch"
    generators = "cmake"
 
    def build(self):
        cmake = CMake(self)
        cmake.configure(source_folder="src")
        cmake.build()
 
    def package(self):
        self.copy("*.hpp", dst="include", src="src/include")
        self.copy("*.lib", dst="lib", keep_path=False)
        self.copy("*.dll", dst="bin", keep_path=False)
        self.copy("*.so", dst="lib", keep_path=False)
        self.copy("*.a", dst="lib", keep_path=False)
 
    def package_info(self):
        self.cpp_info.libs = ["MyLibrary"]

Với thiết lập đó, bạn có thể tạo một gói bằng cách chạy:

conan create . username/channel

Điều này sẽ biên dịch gói và lưu trữ nó trong bộ đệm Conan của bạn. Bây giờ bạn có thể sử dụng gói này làm phụ thuộc trong các dự án khác.