برنامه نویسی

کانن: قهرمان متقابل کامپایل شما

در زمینه توسعه نرم افزار که به طور مداوم در حال تغییر است، زبان های برنامه نویسی مدرن مانند Rust و Go استانداردهای جدیدی را با ادغام مدیران بسته های داخلی ایجاد کرده اند. این ابزارها فرآیند توسعه را بسیار ساده کرده اند و به توسعه دهندگان این امکان را می دهند تا به راحتی وابستگی ها را مدیریت کنند، گردش کار خود را بهبود بخشند و بهره وری را افزایش دهند. راحتی ارائه شده توسط این مدیران بسته بر ضرورت یک راه حل قوی برای توسعه C++ تاکید می کند.

Conan یک مدیر بسته انقلابی است که برای توسعه دهندگان ++C ایجاد شده است. Conan مدیریت بسته را در اکوسیستم C++ ساده و ساده می کند و مدیریت کتابخانه و وابستگی را آسان تر از همیشه می کند. یکی از ویژگی های برجسته Conan پشتیبانی قوی از کامپایل متقابل است که برای توسعه دهندگانی که روی سیستم ها و برنامه های تعبیه شده کار می کنند که چندین معماری را هدف قرار می دهند ضروری است.

قابلیت های کامپایل متقابل Conan با این امکان که توسعه دهندگان برنامه های خود را برای محیط های هدف مختلف از یک راه اندازی واحد بسازند و آزمایش کنند، فرآیند توسعه را ساده می کند. این ویژگی به ویژه برای پروژه‌هایی که نیاز به اجرای پیکربندی‌های سخت‌افزاری مختلف دارند، مفید است و از سازگاری و عملکرد در سراسر صفحه اطمینان می‌دهد.

علاوه بر این، Conan از طیف گسترده‌ای از کتابخانه‌ها پشتیبانی می‌کند و مخزن وسیعی را ارائه می‌دهد که توسعه‌دهندگان می‌توانند از آن برای بهبود پروژه‌های خود استفاده کنند. این پشتیبانی گسترده از کتابخانه تضمین می کند که توسعه دهندگان به ابزارها و منابع مورد نیاز خود دسترسی دارند و زمان صرف شده برای پیکربندی و مدیریت وابستگی ها را کاهش می دهد.

برای سازمان هایی با الزامات خاص، Conan انعطاف پذیری برای مدیریت بسته های خصوصی با استفاده از Artifactory Community Edition فراهم می کند. این ادغام تضمین می‌کند که بسته‌های حساس یا اختصاصی امن باقی می‌مانند و فقط برای پرسنل مجاز قابل دسترسی هستند و یکپارچگی و محرمانه بودن فرآیند توسعه حفظ می‌شود.

CMake

1. Conan را به عنوان یک وابستگی با استفاده از CMake ادغام کنید

CMake's FetchContent ماژول یک ویژگی قدرتمند معرفی شده در CMake 3.11 است که به شما امکان می دهد محتوای خارجی (مانند کد منبع یا اسکریپت ها) را مستقیماً در فرآیند ساخت خود بارگیری و اضافه کنید. این به ویژه برای مدیریت وابستگی های پروژه بدون نیاز به کتابخانه ها یا بسته های از پیش نصب شده مفید است.

1.1. ویژگی های کلیدی FetchContent

  • دانلود و شامل پروژه های خارجی: FetchContent می تواند محتوا را از URL ها، مخازن Git یا مسیرهای محلی دانلود کند. سپس این محتوا می تواند در ساخت شما گنجانده شود، گویی بخشی از درخت منبع شما است.
  • کنترل نسخه: با تعیین URL دقیق یا تگ/شاخه/تعهد Git، می توانید اطمینان حاصل کنید که پروژه شما همیشه از نسخه خاصی از محتوای خارجی استفاده می کند و ثبات و قابلیت تکرارپذیری را فراهم می کند.
  • ادغام خودکار: محتوای واکشی شده را می توان به طور خودکار در سیستم ساخت CMake ادغام کرد و کامپایل کردن و پیوند دادن با محتوای دانلود شده را آسان می کند.
  • پیکربندی و سفارشی سازی: می‌توانید محتوای واکشی شده را با استفاده از متغیرهای CMake پیکربندی کنید و امکان سفارشی‌سازی و تنظیم دقیق نحوه ساخت و استفاده از محتوای خارجی را فراهم کنید.

1.2. رفع وابستگی Canon در CMake

برای مدیریت سیستم عامل های میزبان مختلف با استفاده از FetchContent CMake، می توانید وابستگی ها را به صورت مشروط بر اساس سیستم عامل شناسایی شده واکشی و پیکربندی کنید. برای مثال، ما روی پیاده‌سازی آن بر روی یک ماشین میزبان لینوکس تمرکز کردیم.

include(FetchContent)
FetchContent_Declare(conan
URL https://github.com/conan-io/conan/releases/download/2.3.2/conan-2.3.2-linux-x86_64.tgz
)
FetchContent_Populate(conan)
if (conan_POPULATED)
    set(CONANEXE ${conan_SOURCE_DIR}/conan)
    set(CONAN_AVAILABLE TRUE)
endif()
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نمایه پیکربندی

2. تعریف پروفایل برای کامپایل متقابل

در Conan، پروفایل ها برای تعریف تنظیمات، گزینه ها، متغیرهای محیطی و ابزارهایی که باید در طی فرآیند ایجاد و مصرف بسته استفاده شوند، استفاده می شود. هنگام کامپایل متقابل، ضروری است که بین نمایه های ساخت و میزبان تمایز قائل شوید و زنجیره های ابزار مناسب برای هر کدام تعریف کنید.

2.1. ساخت نمایه

نمایه ساخت محیطی را که ابزارهای ساخت در آن اجرا می شوند را مشخص می کند. این معمولاً دستگاه بومی شما (مثلا x86_64 لینوکس) است که کد را کامپایل می کند.

[settings]
arch=x86_64
build_type=Release
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=Linux
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2.2. نمایه میزبان

نمایه میزبان محیطی را مشخص می کند که بسته کامپایل شده در آن اجرا شود. این می تواند یک معماری یا پلتفرم متفاوت باشد، مانند ARM برای سیستم های جاسازی شده.

[settings]
arch=armv8
build_type=Release
compiler=clang
compiler.cppstd=17
compiler.libcxx=libc++
compiler.version=12
os=Linux
[buildenv]
CC=/usr/local/mdc_sdk_llvm/dp_gea/mdc_cross_compiler/bin/clang
CXX=/usr/local/mdc_sdk_llvm/dp_gea/mdc_cross_compiler/bin/clang++
LD=/usr/local/mdc_sdk_llvm/dp_gea/mdc_cross_compiler/bin/lld
SYSROOT=/usr/local/mdc_sdk_llvm/dp_gea/mdc_cross_compiler/sysroot
CXXFLAGS=--sysroot=/usr/local/mdc_sdk_llvm/dp_gea/mdc_cross_compiler/sysroot
CFLAGS=--sysroot=/usr/local/mdc_sdk_llvm/dp_gea/mdc_cross_compiler/sysroot
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کتابخانه های شخص ثالث

3. کتابخانه های شخص ثالث با استفاده از Conan

Conan Center یک مخزن مرکزی بسته‌های منبع باز است که شامل طیف گسترده‌ای از کتابخانه‌های آماده برای ادغام در پروژه‌های شما است.

3.1. جستجوی کتابخانه ها در مرکز کانن

  • از مرکز Conan دیدن کنید: برای مرور یا جستجوی کتابخانه ها به Conan Center بروید.
  • جستجو برای کتابخانه: از نوار جستجو برای یافتن کتابخانه مورد نیاز خود استفاده کنید. به عنوان مثال، اگر شما به دنبال eigen کتابخانه، “eigen” را در نوار جستجو تایپ کنید.
  • کتابخانه را انتخاب کنید: روی کتابخانه از نتایج جستجو کلیک کنید تا جزئیات آن از جمله نسخه‌ها، گزینه‌های موجود و دستورالعمل‌های استفاده را مشاهده کنید.

3.2. ایجاد یک conanfile.txt فایل

این conanfile.txt فایل برای تعریف وابستگی ها و تنظیمات پروژه شما استفاده می شود. در اینجا یک مثال است conanfile.txt برای پروژه ای که به Eigen و Boost کتابخانه ها:

[requires]
eigen/3.4.0
boost/1.85.0
[generators]
CMakeDeps
CMakeToolchain
[layout]
cmake_layout
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

CMake

4. ادغام Conan با CMake

ادغام Conan با CMake یک روش معمول برای ساده‌سازی مدیریت وابستگی در پروژه‌های C++ است. Conan دانلود و مدیریت وابستگی ها را انجام می دهد، در حالی که CMake فرآیند ساخت را هماهنگ می کند.

if (${CONAN_AVAILABLE})
    execute_process(COMMAND "${CONANEXE}" install conanfile.txt --build=missing  --profile:build=conan.build --profile:host=conan.host
    WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_BINARY_DIR}/Release/generators)
include(conan_toolchain)
find_package(Eigen3 REQUIRED)
find_package(Boost REQUIRED COMPONENTS filesystem)

add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(${PROJECT_NAME} Eigen3::Eigen Boost::filesystem)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کتابخانه ها

5. از کتابخانه ها در کد خود استفاده کنید

اکنون می توانید آن را وارد کرده و استفاده کنید Eigen و Boost کتابخانه های شما main.cpp یا فایل های منبع دیگر

#include 
#include 
#include 

int main() {
  // Create a 2x2 matrix
  Eigen::MatrixXd m(2, 2);
  m  1, 2,
       3, 4;

  // Add another matrix
  Eigen::MatrixXd v(2, 2);
  v  5, 6,
       7, 8;
  m = m + v;

  // Print the resulting matrix
  std::cout  "Resulting matrix:\n"  m  std::endl;
  boost::filesystem::path my_file = "data.txt";

  // Check if the file exists
  if (boost::filesystem::exists(my_file)) {
    std::cout  my_file  " exists."  std::endl;
  } else {
    std::cout  my_file  " does not exist."  std::endl;
  }

  // Create a directory (if it doesn't exist)
  boost::filesystem::path my_dir = "test_dir";
  if (!boost::filesystem::exists(my_dir)) {
    boost::filesystem::create_directory(my_dir);
    std::cout  "Created directory: "  my_dir  std::endl;
  }

  return 0;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

منابع

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا