رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران

سوال

سلام خسته نباشید . 

من می خواستم در مورد روش کلی استفاده از cmake در کامپایل کردن پروژه سی پلاس پلاس بدونم . من تو اینترنت خیلی دنبالش گشتم روش های مختلفی دیدم که استفاده می شد . اما هنوز روش  کلی رو متوجه نشدم که بشه  توی همه پروژه ها با ساختار پروژه مختلف استفاده کرد . 

مثلا اگه بخوام یک کتابخونه ای مثل sqlite3.h به پروژه اضافه کنم چطوری  باید این کتابخونه رو  در  CmakeLists.txt معرفی کنم . 

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

1 پاسخ به این سوال تا کنون داده شده است

پست های پیشنهاد شده

  • 0

سلام

خب این یک مقدار نیاز به توضیح داره ولی در کل روندش از سی میک یکیش اینه که شما با find_package باید کتابخانه رو پیدا کنید و بعد باید کتابخونه و آدرس اینکلود رو به قسمت هایی از پروژه که نیاز هست اضافه کنید.

این مثال کوچیک رو از اضافه کردن کتابخانه‌های boost ببینید :
 

cmake_minimum_required(VERSION 2.8.12)

project(UCCP_Server_Boost)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

include_directories(./src)


#seting file pathes
file(GLOB Headers ./src/*.h)
file(GLOB Cpp ./src/*.cpp)


#library
add_library(Server
  ${Headers}
  ${Cpp}
    )

set (CMAKE_CXX_STANDARD 14)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=gnu++14 -D__STRICT_ANSI__")

find_package (Threads)

find_package(Boost 1.58 REQUIRED COMPONENTS
             date_time
             filesystem
             iostreams
             thread)

if(Boost_FOUND)
  include_directories(${Boost_INCLUDE_DIRS})
  add_executable(${PROJECT_NAME} "posix_main.cpp" )
  target_link_libraries(${PROJECT_NAME}
    Boost::date_time
    Boost::filesystem
    Boost::iostreams
    Boost::thread

    ${CMAKE_THREAD_LIBS_INIT}
    Server

    )
endif(Boost_FOUND)

set(Boost_USE_STATIC_LIBS        ON) # only find static libs
set(Boost_USE_MULTITHREADED      ON)
set(Boost_USE_STATIC_RUNTIME OFF)

توی این مثال با find_package کتابخانه های مختلف رو پیدا کرده بعد چک کرده که اگر پیدا شده بود بیاد لینکشون کنه و با   include_directories(${Boost_INCLUDE_DIRS}) فایل های اینکلود رو اضافه کرده .

برای بقیه کتابخانه ها هم همینند فقط اگر کتابخانه ای با سی میک نوشته شده باشه احتمالا یک سری پارامتر اختصاصی هم داره که کلا متغیر رو میشه با set تنظیم کرد اون چند مورد پایین هم وقتی مثلا مقدارشون ON باشه احتمالا خود کتابخانه با توجه به تعریف شدن اینها یا مقدارشون کاری رو انجام میده .

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

در کل سی میک تقریبا اندازه یک زبان کامل قابلیت داره باید یه وقت درست درمون بذارید برای یاد گیریش این هم لینک مثال اضاف کردن کتابخانه‌های کیوت در CMAKE  میتونید از این مورد هم کمک بگیرید برای درک کلی قضیه.

موفق باشید

 

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو ملحق شوید

شما همین الآن می‌توانید مطلبی را ارسال و بعداً ثبت‌نام کنید. اگر حساب کاربری دارید، و با حساب کاربری خود مطلب ارسال کنید.
نکته: مطلب شما قبل از انتشار نیاز به بازبینی توسط میانجی‌گر‌ها دارد.

مهمان
پاسخ به این سوال ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...