CMake او C++ د تل لپاره وروڼه دي

CMake او C++ د تل لپاره وروڼه دي

د پراختیا په جریان کې ، زه خوښوم چې تالیف کونکي بدل کړئ ، حالتونه رامینځته کړئ ، د انحصار نسخې ، جامد تحلیل ترسره کړئ ، فعالیت اندازه کړئ ، پوښښ راټول کړئ ، اسناد رامینځته کړئ ، او داسې نور. او زه واقعیا د CMake سره مینه لرم ځکه چې دا ما ته اجازه راکوي هرڅه چې زه یې غواړم ترسره کړم.

ډیری خلک په CMake نیوکه کوي، او ډیری وختونه د دې مستحق دي، مګر که تاسو ورته وګورئ، هر څه دومره خراب ندي، او پدې وروستیو کې هیڅ بد ندی، او د پرمختګ لوري خورا مثبت دی.

په دې یادښت کې، زه غواړم تاسو ته ووایم چې څنګه په ساده ډول په C++ کې د CMake سیسټم کې د سرلیک کتابتون تنظیم کړئ ترڅو لاندې فعالیت ترلاسه کړئ:

  1. مجلس
  2. د اتوماتیک ازموینې؛
  3. د کوډ پوښښ اندازه کول؛
  4. نصبول
  5. اتوماتیک اسناد؛
  6. آنلاین سینڈ باکس نسل؛
  7. جامد تحلیل.

هرڅوک چې دمخه په ګټو پوهیږي او C-make کولی شي په ساده ډول د پروژې ټیمپلیټ ډاونلوډ کړئ او د هغې کارول پیل کړئ.


منځپانګې

  1. له دننه څخه پروژه
    1. د پروژې جوړښت
    2. د اصلي CMake فایل (./CMakeLists.txt)
      1. د پروژې معلومات
      2. د پروژې اختیارونه
      3. د تالیف اختیارونه
      4. اصلي هدف
      5. د جوړولو
      6. ازموینې
      7. لاسوند
      8. آنلاین سینڈ باکس
    3. د ازموینې سکریپټ (test/CMakeLists.txt)
      1. ازمايښت
      2. پیوستون
    4. د اسنادو لپاره سکریپټ (doc/CMakeLists.txt)
    5. د آنلاین سینڈ باکس لپاره سکریپټ (آنلاین/CMakeLists.txt)
  2. بهر پروژه
    1. شورا
      1. نسل
      2. شورا
    2. غوراوي
      1. MYLIB_COVERAGE
      2. MYLIB_TESTING
      3. MYLIB_DOXYGEN_LANGUAGE
    3. د مجلس اهداف
      1. په تلواله
      2. mylib-unit-tests
      3. وګورئ
      4. پوښښ
      5. ډاکتر
      6. wandbox
    4. مثالونه
  3. توکي
  4. جامد تحلیل
  5. وروسته

له دننه څخه پروژه

د پروژې جوړښت

.
├── CMakeLists.txt
├── README.en.md
├── README.md
├── doc
│   ├── CMakeLists.txt
│   └── Doxyfile.in
├── include
│   └── mylib
│       └── myfeature.hpp
├── online
│   ├── CMakeLists.txt
│   ├── mylib-example.cpp
│   └── wandbox.py
└── test
    ├── CMakeLists.txt
    ├── mylib
    │   └── myfeature.cpp
    └── test_main.cpp

موږ به په عمده ډول د CMake سکریپټونو تنظیم کولو څرنګوالي په اړه وغږیږو ، نو دوی به په تفصیل سره بحث وشي. هرڅوک کولی شي پاتې فایلونه مستقیم وګوري د ټیمپلیټ پروژې پاڼې کې.

د اصلي CMake فایل (./CMakeLists.txt)

د پروژې معلومات

له هرڅه دمخه ، تاسو اړتیا لرئ د CMake سیسټم اړین نسخه غوښتنه وکړئ. CMake وده کوي، د قوماندې لاسلیکونه او چلند په مختلفو شرایطو کې بدلیږي. د دې لپاره چې CMake سمدلاسه پوه شي چې موږ له دې څخه څه غواړو، موږ باید سمدلاسه د دې لپاره زموږ اړتیاوې ثبت کړو.

cmake_minimum_required(VERSION 3.13)

بیا به موږ خپله پروژه ډیزاین کړو، د هغې نوم، نسخه، ژبې کارول شوي، او نور (وګورئ. команду project).

پدې حالت کې موږ ژبه په ګوته کوو CXX (او دا د C++ معنی لري) نو ځکه چې CMake د C ژبې تالیف کونکي فشار او لټون نه کوي (د ډیفالټ په واسطه ، CMake دوه ژبې لري: C او C++).

project(Mylib VERSION 1.0 LANGUAGES CXX)

دلته تاسو کولی شئ سمدلاسه وګورئ چې ایا زموږ پروژه په بله پروژه کې د فرعي پروژې په توګه شامله ده. دا به په راتلونکي کې ډیره مرسته وکړي.

get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)

د پروژې اختیارونه

موږ به دوه اختیارونه وړاندې کړو.

لومړی اختیار دی MYLIB_TESTING - د واحد ازموینې غیر فعالولو لپاره. دا ممکن اړین وي که موږ ډاډه یو چې هرڅه د ازموینو سره سم دي ، مګر موږ یوازې غواړو ، د مثال په توګه ، زموږ پروژه نصب یا بسته کړو. یا زموږ پروژه د فرعي پروژې په توګه شامله شوې - پدې حالت کې زموږ د پروژې کارونکي زموږ د ازموینو چلولو کې علاقه نلري. تاسو هغه انحصار نه ازموئ چې تاسو یې کاروئ، ایا تاسو؟

option(MYLIB_TESTING "Включить модульное тестирование" ON)

سربیره پردې، موږ به یو جلا انتخاب جوړ کړو MYLIB_COVERAGE د ازموینو په واسطه د کوډ پوښښ اندازه کولو لپاره، مګر دا به اضافي وسیلو ته اړتیا ولري، نو دا به په ښکاره توګه فعال شي.

option(MYLIB_COVERAGE "Включить измерение покрытия кода тестами" OFF)

د تالیف اختیارونه

البته، موږ ښه پلس پروګرامونکي یو، نو موږ د کمپیلر څخه د تالیف وخت تشخیص اعظمي کچه غواړو. یو موږک به نه تیریږي.

add_compile_options(
    -Werror

    -Wall
    -Wextra
    -Wpedantic

    -Wcast-align
    -Wcast-qual
    -Wconversion
    -Wctor-dtor-privacy
    -Wenum-compare
    -Wfloat-equal
    -Wnon-virtual-dtor
    -Wold-style-cast
    -Woverloaded-virtual
    -Wredundant-decls
    -Wsign-conversion
    -Wsign-promo
)

موږ به تمدیدونه هم غیر فعال کړو ترڅو په بشپړ ډول د C++ ژبې معیار سره مطابقت ولري. دوی د ډیفالټ لخوا په CMake کې فعال شوي.

if(NOT CMAKE_CXX_EXTENSIONS)
    set(CMAKE_CXX_EXTENSIONS OFF)
endif()

اصلي هدف

زموږ کتابتون یوازې د سرلیک فایلونو څخه جوړ دی، دا پدې مانا ده چې موږ د جامد یا متحرک کتابتونونو په بڼه هیڅ اخراج نلرو. له بلې خوا، زموږ د کتابتون په بهر کې کارولو لپاره، دا باید نصب شي، دا باید په سیسټم کې د کشف وړ وي او ستاسو پروژې سره وصل شي، او په ورته وخت کې ورته سرلیکونه، او په احتمالي توګه ځینې اضافي سرلیکونه، ملکیتونه ورسره تړلي دي.

د دې هدف لپاره، موږ یو انٹرفیس کتابتون جوړوو.

add_library(mylib INTERFACE)

موږ سرلیکونه زموږ د انٹرفیس کتابتون ته وتړو.

د CMake عصري، فیشني، ځوانانو کارول پدې معنی دي چې سرلیکونه، ملکیتونه، او نور. د یو واحد هدف له لارې لیږدول کیږي. نو دا به کافي وي target_link_libraries(target PRIVATE dependency)، او ټول سرلیکونه چې د هدف سره تړاو لري dependency، د هدف پورې اړوند سرچینو لپاره به شتون ولري target. او تاسو هیڅ اړتیا نلرئ [target_]include_directories. دا به لاندې په تحلیل کې وښودل شي د واحد ازموینې لپاره د CMake سکریپټ.

دا هم د پام وړ ارزښت لري چې تش په نامه. выражения-генераторы: $<...>.

دا کمانډ هغه سرلیکونه شریکوي چې موږ ورته اړتیا لرو زموږ د انٹرفیس کتابتون سره ، او که زموږ کتابتون د ورته CMake درجه بندي کې کوم هدف سره وصل وي ، نو د لارښود څخه سرلیکونه به ورسره تړاو ولري. ${CMAKE_CURRENT_SOURCE_DIR}/include، او که زموږ کتابتون په سیسټم کې نصب شوی وي او د کمانډ په کارولو سره بلې پروژې سره وصل وي find_package، بیا د لارښود څخه سرلیکونه به ورسره تړاو ولري include د نصبولو لارښود سره تړاو لري.

target_include_directories(mylib INTERFACE
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:include>
)

راځئ چې د ژبې معیار وټاکو. البته، خورا وروستی. په ورته وخت کې، موږ نه یوازې معیاري شاملوو، بلکې دا هغو کسانو ته هم غزوو چې زموږ کتابتون به کاروي. دا د دې حقیقت له امله ترلاسه کیږي چې ټاکل شوې ملکیت کټګوري لري INTERFACE (وګوره) target_compile_features کمانډ).

target_compile_features(mylib INTERFACE cxx_std_17)

راځئ چې زموږ د کتابتون لپاره یو عرف جوړ کړو. سربیره پردې، د ښکلا لپاره، دا به په ځانګړي "نوم ځای" کې وي. دا به ګټور وي کله چې مختلف ماډلونه زموږ په کتابتون کې ښکاره شي، او موږ ځو چې دوی په خپلواکه توګه له یو بل سره وصل کړو. لکه په بستا کې، د بیلګې په توګه.

add_library(Mylib::mylib ALIAS mylib)

د جوړولو

په سیسټم کې زموږ سرلیکونه نصب کول. دلته هرڅه ساده دي. موږ وایو چې فولډر د ټولو سرلیکونو سره باید لارښود ته لاړ شي include د نصب کولو ځای سره تړاو لري.

install(DIRECTORY include/mylib DESTINATION include)

بیا، موږ د جوړونې سیسټم ته خبر ورکوو چې موږ غواړو د دریمې ډلې پروژو کې قوماندې ته زنګ ووهو find_package(Mylib) او هدف ترلاسه کړئ Mylib::mylib.

install(TARGETS mylib EXPORT MylibConfig)
install(EXPORT MylibConfig NAMESPACE Mylib:: DESTINATION share/Mylib/cmake)

راتلونکی سپیل باید پدې ډول پوه شي. کله چې د دریمې ډلې پروژې کې موږ کمانډ غږ کوو find_package(Mylib 1.2.3 REQUIRED)، او د نصب شوي کتابتون اصلي نسخه به د نسخې سره مطابقت نلري 1.2.3CMake به په اتوماتيک ډول یوه تېروتنه رامنځته کړي. دا دی، تاسو اړتیا نلرئ په لاسي ډول نسخې تعقیب کړئ.

include(CMakePackageConfigHelpers)
write_basic_package_version_file("${PROJECT_BINARY_DIR}/MylibConfigVersion.cmake"
    VERSION
        ${PROJECT_VERSION}
    COMPATIBILITY
        AnyNewerVersion
)
install(FILES "${PROJECT_BINARY_DIR}/MylibConfigVersion.cmake" DESTINATION share/Mylib/cmake)

ازموینې

که ازمایښتونه په ښکاره ډول غیر فعال وي اړونده اختیار یا زموږ پروژه یوه فرعي پروژه ده، دا د کمانډ په کارولو سره د بل CMake پروژې سره وصل دی add_subdirectory، موږ نور د درجه بندي په اوږدو کې حرکت نه کوو، او سکریپټ، کوم چې د ازموینو د تولید او چلولو امرونه بیانوي، په ساده ډول نه چلیږي.

if(NOT MYLIB_TESTING)
    message(STATUS "Тестирование проекта Mylib выключено")
elseif(IS_SUBPROJECT)
    message(STATUS "Mylib не тестируется в режиме подмодуля")
else()
    add_subdirectory(test)
endif()

لاسوند

د فرعي پروژې په قضیه کې به اسناد هم نه رامینځته کیږي.

if(NOT IS_SUBPROJECT)
    add_subdirectory(doc)
endif()

آنلاین سینڈ باکس

په ورته ډول، فرعي پروژه به آنلاین سینڈ باکس هم ونه لري.

if(NOT IS_SUBPROJECT)
    add_subdirectory(online)
endif()

د ازموینې سکریپټ (test/CMakeLists.txt)

ازمايښت

تر ټولو لومړی، موږ د اړتیا وړ ازموینې چوکاټ سره یوه کڅوړه پیدا کوو (ستاسو د خوښې سره بدل کړئ).

find_package(doctest 2.3.3 REQUIRED)

راځئ چې د ازموینو سره زموږ د اجرا وړ فایل جوړ کړو. معمولا زه په مستقیم ډول د اجرا وړ بائنری کې یوازې هغه فایل اضافه کوم چې فنکشن ولري main.

add_executable(mylib-unit-tests test_main.cpp)

او زه هغه فایلونه اضافه کوم چې پدې کې ازموینې پخپله وروسته بیان شوي. مګر تاسو اړتیا نلرئ چې دا وکړئ.

target_sources(mylib-unit-tests PRIVATE mylib/myfeature.cpp)

موږ انحصارونه وصل کوو. مهرباني وکړئ په یاد ولرئ چې موږ یوازې د CMake اهدافو سره اړیکه نیولې چې موږ یې زموږ بائنری ته اړتیا لرو او کمانډ ته یې نه وایو target_include_directories. د ازموینې چوکاټ او زموږ څخه سرلیکونه Mylib::mylib، او همدارنګه د پیرامیټونو جوړول (زموږ په قضیه کې ، دا د C++ ژبې معیار دی) د دې اهدافو سره مینځ ته راغلی.

target_link_libraries(mylib-unit-tests
    PRIVATE
        Mylib::mylib
        doctest::doctest
)

په نهایت کې ، موږ یو ډمي هدف رامینځته کوو ، چې "جوړول" یې د چلولو ازموینو سره مساوي دي ، او دا هدف په ډیفالټ جوړونه کې اضافه کوو (خصوصیت د دې لپاره مسؤل دی. ALL). دا پدې مانا ده چې ډیفالټ جوړونه د چلولو لپاره ازموینې هڅوي ، پدې معنی چې موږ به هیڅکله د دوی چلول هیر کړو.

add_custom_target(check ALL COMMAND mylib-unit-tests)

پیوستون

بیا، موږ د کوډ پوښښ اندازه کول فعالوو که مناسب انتخاب مشخص شوی وي. زه به توضیحاتو ته لاړ نه شم ، ځکه چې دوی د CMake په پرتله د پوښښ اندازه کولو وسیلې سره ډیر تړاو لري. دا یوازې مهمه ده چې یادونه وکړو چې د پایلو پراساس به یو هدف رامینځته شي coverage، د کوم سره چې د پوښښ اندازه کول پیل کول اسانه دي.

find_program(GCOVR_EXECUTABLE gcovr)
if(MYLIB_COVERAGE AND GCOVR_EXECUTABLE)
    message(STATUS "Измерение покрытия кода тестами включено")

    target_compile_options(mylib-unit-tests PRIVATE --coverage)
    target_link_libraries(mylib-unit-tests PRIVATE gcov)

    add_custom_target(coverage
        COMMAND
            ${GCOVR_EXECUTABLE}
                --root=${PROJECT_SOURCE_DIR}/include/
                --object-directory=${CMAKE_CURRENT_BINARY_DIR}
        DEPENDS
            check
    )
elseif(MYLIB_COVERAGE AND NOT GCOVR_EXECUTABLE)
    set(MYLIB_COVERAGE OFF)
    message(WARNING "Для замеров покрытия кода тестами требуется программа gcovr")
endif()

د اسنادو لپاره سکریپټ (doc/CMakeLists.txt)

ډاکسیجن وموندل شو.

find_package(Doxygen)

بیا، موږ ګورو چې ایا کارونکي د ژبې متغیر ټاکلی دی. که هو، نو موږ یې لاس نه اخلو، که نه، بیا موږ روسی اخلو. بیا موږ د ډاکسیجن سیسټم فایلونه تنظیم کوو. ټول اړین تغیرات، د ژبې په ګډون، د ترتیب کولو پروسې په جریان کې هلته ځي (وګورئ. команду configure_file).

بیا موږ یو هدف جوړوو doc، کوم چې به د اسنادو تولید پیل کړي. څرنګه چې د اسنادو تولید د پراختیا په بهیر کې ترټولو لوی اړتیا نه ده، هدف به په ډیفالټ سره فعال نشي؛ دا باید په ښکاره ډول پیل شي.

if (Doxygen_FOUND)
    if (NOT MYLIB_DOXYGEN_LANGUAGE)
        set(MYLIB_DOXYGEN_LANGUAGE Russian)
    endif()
    message(STATUS "Doxygen documentation will be generated in ${MYLIB_DOXYGEN_LANGUAGE}")
    configure_file(Doxyfile.in Doxyfile)
    add_custom_target(doc COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
endif ()

د آنلاین سینڈ باکس لپاره سکریپټ (آنلاین/CMakeLists.txt)

دلته موږ دریم پایتون پیدا کوو او یو هدف جوړوو wandbox، کوم چې د خدمت API سره ورته غوښتنه رامینځته کوي وانډ بکس، او هغه لیرې کوي. ځواب د بشپړ شوي شګو بکس سره د لینک سره راځي.

find_program(PYTHON3_EXECUTABLE python3)
if(PYTHON3_EXECUTABLE)
    set(WANDBOX_URL "https://wandbox.org/api/compile.json")

    add_custom_target(wandbox
        COMMAND
            ${PYTHON3_EXECUTABLE} wandbox.py mylib-example.cpp "${PROJECT_SOURCE_DIR}" include |
            curl -H "Content-type: application/json" -d @- ${WANDBOX_URL}
        WORKING_DIRECTORY
            ${CMAKE_CURRENT_SOURCE_DIR}
        DEPENDS
            mylib-unit-tests
    )
else()
    message(WARNING "Для создания онлайн-песочницы требуется интерпретатор ЯП python 3-й версии")
endif()

بهر پروژه

اوس راځئ چې وګورو چې دا ټول څنګه کارول کیږي.

شورا

د دې پروژې جوړول، لکه د CMake جوړونې سیسټم کې د بلې پروژې په څیر، دوه مرحلې لري:

نسل

cmake -S путь/к/исходникам -B путь/к/сборочной/директории [опции ...]

که پورتنۍ کمانډ د CMake د زاړه نسخې له امله کار نه وي کړی، د پریښودلو هڅه وکړئ -S:

cmake путь/к/исходникам -B путь/к/сборочной/директории [опции ...]

د اختیارونو په اړه نور.

د پروژې جوړول

cmake --build путь/к/сборочной/директории [--target target]

د مجلس اهدافو په اړه نور.

غوراوي

MYLIB_COVERAGE

cmake -S ... -B ... -DMYLIB_COVERAGE=ON [прочие опции ...]

هدف پکې شامل دی coverage، د کوم سره چې تاسو کولی شئ د ازموینو لخوا د کوډ پوښښ اندازه کول پیل کړئ.

MYLIB_TESTING

cmake -S ... -B ... -DMYLIB_TESTING=OFF [прочие опции ...]

د واحد ټیسټ جوړولو او هدف غیر فعال کولو وړتیا چمتو کوي check. د پایلې په توګه ، د ازموینو لخوا د کوډ پوښښ اندازه کول بند شوي (وګورئ. MYLIB_COVERAGE).

ازموینه هم په اوتومات ډول غیر فعال کیږي که چیرې پروژه د کمانډ په کارولو سره د فرعي پروژې په توګه بلې پروژې سره وصل وي add_subdirectory.

MYLIB_DOXYGEN_LANGUAGE

cmake -S ... -B ... -DMYLIB_DOXYGEN_LANGUAGE=English [прочие опции ...]

د اسنادو ژبه بدلوي چې هدف یې تولیدوي doc ورکړل شوي ته. د شته ژبو لیست لپاره، وګورئ د ډاکسیجن سیسټم ویب پاڼه.

روسی په ډیفالټ فعال دی.

د مجلس اهداف

په تلواله

cmake --build path/to/build/directory
cmake --build path/to/build/directory --target all

که هدف مشخص شوی نه وي (کوم چې د هدف سره برابر وي all)، هرڅه چې کولی شي راټولوي، او هدف هم غږوي check.

mylib-unit-tests

cmake --build path/to/build/directory --target mylib-unit-tests

د واحد ازموینې راټولول. په ډیفالټ فعال شوی.

وګورئ

cmake --build путь/к/сборочной/директории --target check

راټول شوي (راټول شوي، که دمخه نه وي) د واحد ازموینې پرمخ وړي. په ډیفالټ فعال شوی.

دا هم وګوره mylib-unit-tests.

پوښښ

cmake --build путь/к/сборочной/директории --target coverage

د برنامه په کارولو سره د ازموینو په واسطه د کوډ پوښښ لپاره د چلولو (چلولو ، که دمخه نه وي) د واحد ازموینې تحلیل کوي gcovr.

د کوټینګ اخراج به داسې ښکاري:

------------------------------------------------------------------------------
                           GCC Code Coverage Report
Directory: /path/to/cmakecpptemplate/include/
------------------------------------------------------------------------------
File                                       Lines    Exec  Cover   Missing
------------------------------------------------------------------------------
mylib/myfeature.hpp                            2       2   100%   
------------------------------------------------------------------------------
TOTAL                                          2       2   100%
------------------------------------------------------------------------------

هدف یوازې هغه وخت شتون لري کله چې اختیار فعال وي MYLIB_COVERAGE.

دا هم وګوره check.

ډاکتر

cmake --build путь/к/сборочной/директории --target doc

د سیسټم په کارولو سره د کوډ اسنادو تولید پیل کوي اکسیجن.

wandbox

cmake --build путь/к/сборочной/директории --target wandbox

د خدماتو ځواب داسې ښکاري:

{
    "permlink" :    "QElvxuMzHgL9fqci",
    "status" :  "0",
    "url" : "https://wandbox.org/permlink/QElvxuMzHgL9fqci"
}

خدمت د دې لپاره کارول کیږي وانډ بکس. زه نه پوهیږم چې د دوی سرورونه څومره انعطاف منونکي دي، مګر زه فکر کوم چې دا فرصت باید ناوړه ګټه پورته نشي.

مثالونه

پروژه د پوښښ اندازه کولو سره په ډیبګ حالت کې جوړه کړئ

cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Debug -DMYLIB_COVERAGE=ON
cmake --build путь/к/сборочной/директории --target coverage --parallel 16

د لومړنۍ غونډې او ازموینې پرته د پروژې نصب کول

cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DMYLIB_TESTING=OFF -DCMAKE_INSTALL_PREFIX=путь/к/установойной/директории
cmake --build путь/к/сборочной/директории --target install

د ورکړل شوي کمپیلر سره د ریلیز حالت کې جوړ کړئ

cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=g++-8 -DCMAKE_PREFIX_PATH=путь/к/директории/куда/установлены/зависимости
cmake --build путь/к/сборочной/директории --parallel 4

په انګلیسي ژبه د اسنادو جوړول

cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Release -DMYLIB_DOXYGEN_LANGUAGE=English
cmake --build путь/к/сборочной/директории --target doc

توکي

  1. سي ایم کی 3.13

    په حقیقت کې، د CMake نسخه 3.13 یوازې د دې مرستې کې تشریح شوي کنسول کمانډونو چلولو لپاره اړین دی. د CMake سکریپټونو ترکیب له نظره، نسخه 3.8 کافي ده که چیرې نسل په نورو لارو ویل کیږي.

  2. د ازموینې کتابتون doctest

    ازموینه غیر فعال کیدی شي (وګورئ опцию MYLIB_TESTING).

  3. اکسیجن

    د هغه ژبې بدلولو لپاره چې اسناد به یې تولید شي، یو اختیار چمتو شوی MYLIB_DOXYGEN_LANGUAGE.

  4. د ژبې ژباړونکی پیټون 3

    د اتوماتیک نسل لپاره آنلاین شګه بکسونه.

جامد تحلیل

د CMake او یو څو ښه وسیلو سره، تاسو کولی شئ د لږې هڅې سره جامد تحلیل چمتو کړئ.

Cppcheck

CMake د جامد تحلیلي وسیلې لپاره جوړ شوی ملاتړ لري Cppcheck.

د دې کولو لپاره تاسو اړتیا لرئ د اختیار څخه کار واخلئ CMAKE_CXX_CPPCHECK:

cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_CPPCHECK="cppcheck;--enable=all;-Iпуть/к/исходникам/include"

له دې وروسته، جامد تحلیل به په اوتومات ډول پیل شي هرکله چې سرچینه تالیف او بیا تنظیم شي. هیڅ اضافي کار ته اړتیا نشته.

زنګ وهل

د یوې په زړه پورې وسیلې په مرسته scan-build تاسو کولی شئ په هیڅ وخت کې جامد تحلیل هم پرمخ بوځي:

scan-build cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Debug
scan-build cmake --build путь/к/сборочной/директории

دلته، د Cppcheck سره د قضیې برعکس، تاسو اړتیا لرئ چې هر وخت جوړ کړئ scan-build.

وروسته

CMake یو خورا پیاوړی او انعطاف منونکی سیسټم دی چې تاسو ته اجازه درکوي د هر خوند او رنګ لپاره فعالیت پلي کړئ. او، که څه هم نحو کله ناکله د غوښتلو لپاره ډیر څه پریږدي، شیطان لاهم دومره ډارونکی ندی لکه څنګه چې هغه انځور شوی. د ټولنې او روغتیا ګټې لپاره د CMake جوړونې سیسټم وکاروئ.

د پروژې ټیمپلیټ ډاونلوډ کړئ

سرچینه: www.habr.com

Add a comment