CMake û C++ her û her birayên hev in

CMake û C++ her û her birayên hev in

Di dema pêşkeftinê de, ez hez dikim ku berhevkeran biguhezînim, awayan ava bikim, guhertoyên girêdayîbûnê, analîzên statîk bikim, performansê bipîvim, vegirtinê berhev bikim, belgeyan biafirînim, hwd. Û ez bi rastî ji CMake hez dikim ji ber ku ew dihêle ku ez her tiştê ku ez dixwazim bikim.

Gelek kes CMake-ê rexne dikin, û pir caran jî bi heqî, lê heke hûn lê binerin, ne her tişt ew qas xirab e, û vê dawiyê qet ne xerab e, û rêberiya pêşveçûnê pir erênî ye.

Di vê notê de, ez dixwazim ji we re bibêjim ka meriv çawa di pergala CMake de pirtûkxaneyek sernavê di C ++ de bi hêsanî organîze dike da ku fonksiyona jêrîn bistîne:

  1. Civîn;
  2. Testên Autorun;
  3. Pîvana vegirtina kodê;
  4. Lêkirinî;
  5. Auto-documentation;
  6. nifşa sandboxê ya serhêl;
  7. Analîza statîk.

Her kesê ku jixwe avantaj û C-çêker fam dike dikare bi hêsanî şablonê projeyê dakêşin û dest bi karanîna wê bikin.


Contains

  1. Projeya ji hundir
    1. Struktura projeyê
    2. Pelê sereke CMake (./CMakeLists.txt)
      1. Agahdariya projeyê
      2. Vebijêrkên Projeyê
      3. Vebijarkên berhevkirinê
      4. armanca bingehîn
      5. mîhengê
      6. Testsên
      7. Dokumentasyonê
      8. Sandbox liserxetê
    3. Nivîsara testê (test/CMakeLists.txt)
      1. Îmtîhanê
      2. Coating
    4. Skrîpta ji bo belgekirinê (doc/CMakeLists.txt)
    5. Skrîpta ji bo sandboxa serhêl (serhêl/CMakeLists.txt)
  2. Proje li derve
    1. Meclîsa
      1. Bend
      2. Meclîsa
    2. Vebijarkên
      1. MYLIB_COVERAGE
      2. MYLIB_TESTING
      3. MYLIB_DOXYGEN_LANGUAGE
    3. Meclîsê hedef dike
      1. by default
      2. mylib-unit-tests
      3. berçavkirinî
      4. Nêzîkatîya
      5. doc
      6. wandbox
    4. wergerandî
  3. Amûr
  4. Analîza statîk
  5. Paşê

Projeya ji hundir

Struktura projeyê

.
├── 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

Em ê bi giranî li ser çawa birêxistinkirina nivîsarên CMake biaxivin, ji ber vê yekê ew ê bi hûrgulî werin nîqaş kirin. Kes dikare pelên mayî rasterast bibîne li ser rûpela projeya şablonê.

Pelê sereke CMake (./CMakeLists.txt)

Agahdariya projeyê

Berî her tiştî, hûn hewce ne ku guhertoya pêdivî ya pergala CMake daxwaz bikin. CMake pêş dikeve, di şert û mercên cûda de îmze û behreyên fermanê diguhezin. Ji bo ku CMake tavilê fêm bike ku em jê çi dixwazin, pêdivî ye ku em tavilê daxwazên xwe ji bo wê tomar bikin.

cmake_minimum_required(VERSION 3.13)

Dûv re em ê projeya xwe, navê wê, guherto, zimanên ku hatine bikar anîn, hwd destnîşan bikin (binêre. команду project).

Di vê rewşê de em ziman nîşan didin CXX (û ev tê wateya C ++) da ku CMake li berhevkarek zimanê C negere û negere (ji hêla xwerû, CMake du zimanan digire: C û C ++).

project(Mylib VERSION 1.0 LANGUAGES CXX)

Li vir hûn dikarin tavilê kontrol bikin ka projeya me di projeyek din de wekî bineprojeyek heye an na. Ev ê di pêşerojê de gelek alîkariyê bike.

get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)

Vebijêrkên Projeyê

Em ê du vebijarkan bidin.

Vebijêrka yekem e MYLIB_TESTING - Ji bo ceribandinên yekîneyê neçalak bikin. Dibe ku ev pêdivî be heke em pê ewle bin ku her tişt bi ceribandinan re di rê de ye, lê em tenê dixwazin, mînakî, projeya xwe saz bikin an pak bikin. An jî projeya me wekî bineprojeyek tête nav kirin - di vê rewşê de, bikarhênerê projeya me ne eleqedar e ku ceribandinên me bike. Hûn girêdayî girêdayî girêdayî ne ku hûn bikar tînin, hûn?

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

Digel vê yekê, em ê vebijarkek cûda jî çêbikin MYLIB_COVERAGE ji bo pîvandina vegirtina kodê ji hêla ceribandinan ve, lê ew ê amûrên din hewce bike, ji ber vê yekê dê hewce bike ku ew bi eşkere were çalak kirin.

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

Vebijarkên berhevkirinê

Bê guman, em bernamesazên pluss xweş in, ji ber vê yekê em asta herî zêde ya tespîtkirina-dema berhevkirinê ji berhevkerê dixwazin. Dê mişkek jî bi ser nekeve.

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
)

Ji bo ku bi tevahî standarda zimanê C++ tevbigerin, em ê pêvekan jî neçalak bikin. Ew di CMake de ji hêla xwerû ve têne çalak kirin.

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

armanca bingehîn

Pirtûkxaneya me tenê ji pelên sernavê pêk tê, ku tê vê wateyê ku em di forma pirtûkxaneyên statîk an dînamîkî de çu çu tine ne. Ji hêla din ve, ji bo ku pirtûkxaneya me ji derve were bikar anîn, pêdivî ye ku ew were saz kirin, pêdivî ye ku ew di pergalê de were tespît kirin û bi projeya we ve were girêdan, û di heman demê de heman sernivîs, û her weha dibe ku hin yên din jî hebe. bi taybetmendiyên wê ve girêdayî ne.

Ji bo vê armancê, em pirtûkxaneyek navbeynkar ava dikin.

add_library(mylib INTERFACE)

Em sernivîsan bi pirtûkxaneya xweya pêwendiyê ve girê didin.

Bikaranîna nûjen, nûjen, ciwan a CMake tê vê wateyê ku sernav, taybetmendî, hwd. bi yek armancê ve hatî şandin. Ji ber vê gotinê bes e target_link_libraries(target PRIVATE dependency), û hemî sernivîsên ku bi armancê ve girêdayî ne dependency, dê ji bo çavkaniyên aîdê armancê peyda bibin target. Û hûn ne hewce ne [target_]include_directories. Ev ê li jêr di analîzê de were destnîşan kirin Nivîsara CMake ji bo ceribandinên yekîneyê.

Di heman demê de hêja ye ku meriv bala xwe bide ya ku tê gotin. выражения-генераторы: $<...>.

Vê fermanê sernivîsên ku em hewce ne bi pirtûkxaneya navbeynkariya me re têkildar dike, û heke pirtûkxaneya me di heman hiyerarşiya CMake de bi armancek ve girêdayî be, wê hingê sernavên ji pelrêça wê bi wê re têkildar bibin. ${CMAKE_CURRENT_SOURCE_DIR}/include, û heke pirtûkxaneya me li ser pergalê hatî saz kirin û bi karanîna fermanê bi projeyek din ve girêdayî ye find_package, wê hingê sernivîsên ji pelrêçê dê bi wê re bêne girêdan include nisbet bi pelrêça sazkirinê.

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

Ka em standardek ziman destnîşan bikin. Bê guman, ya paşîn. Di heman demê de, em ne tenê standardê vedigirin, lê di heman demê de wê ji yên ku dê pirtûkxaneya me bikar bînin jî dirêj dikin. Ev ji ber vê yekê tê bidestxistin ku taybetmendiya set xwedan kategoriyek e INTERFACE (binihêrin fermana target_compile_features).

target_compile_features(mylib INTERFACE cxx_std_17)

Werin em ji bo pirtûkxaneya xwe navekî biafirînin. Wekî din, ji bo bedewiyê, ew ê di nav "navekî" taybetî de be. Dema ku modulên cihêreng di pirtûkxaneya me de xuya dibin, ev ê kêrhatî be, û em diçin ku wan serbixwe ji hev girêbidin. Mînakî li Busta, mînakî.

add_library(Mylib::mylib ALIAS mylib)

mîhengê

Sernavên me di pergalê de saz kirin. Li vir her tişt hêsan e. Em dibêjin ku peldanka bi hemî sernivîsan re divê bikeve nav pelrêça include li gorî cîhê sazkirinê.

install(DIRECTORY include/mylib DESTINATION include)

Dûv re, em pergala avakirinê agahdar dikin ku em dixwazin di projeyên partiya sêyemîn de emrê gazî bikin find_package(Mylib) û armancekê bi dest bixin Mylib::mylib.

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

Pêvajoya paşîn divê bi vî rengî were fam kirin. Dema ku di projeyek sêyemîn de em gazî fermanê dikin find_package(Mylib 1.2.3 REQUIRED), û guhertoya rastîn a pirtûkxaneya sazkirî dê bi guhertoyê re negunca be 1.2.3CMake dê bixweber xeletiyek çêbike. Ango, hûn ê ne hewce ne ku guhertoyên bi destan bişopînin.

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)

Testsên

Ger ceribandin bi eşkere bi karanîna neçalak kirin vebijarka têkildar an jî projeya me bineprojeyek e, ango ew bi projeyek din a CMake ve bi karanîna fermanê ve girêdayî ye add_subdirectory, em li ser hiyerarşiyê pêşde naçin, û skrîpta ku fermanên ji bo hilberandin û xebitandina ceribandinan vedibêje, bi tenê naçe.

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

Dokumentasyonê

Di mijara bineprojeyek de jî belgename nayê çêkirin.

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

Sandbox liserxetê

Di heman demê de, bineprojeyek dê ne xwediyê sandboxek serhêl jî be.

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

Nivîsara testê (test/CMakeLists.txt)

Îmtîhanê

Berî her tiştî, em pakêtek bi çarçoweya ceribandinê ya pêwîst re dibînin (bi ya xweya bijare veguherînin).

find_package(doctest 2.3.3 REQUIRED)

Werin em bi ceribandinan dosyaya xweya îcrakar biafirînin. Bi gelemperî ez tenê pelê ku dê fonksiyonê tê de hebe rasterast li binarya îcrakar zêde dikim main.

add_executable(mylib-unit-tests test_main.cpp)

Û ez pelên ku tê de ceribandin bixwe paşê têne vegotin lê zêde dikim. Lê hûn ne hewce ne ku hûn vê yekê bikin.

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

Em girêdayî girêdayî ne. Ji kerema xwe bala xwe bidin ku me tenê armancên CMake yên ku me hewce ne bi binarya xwe ve girêda û gazî ferman nekir target_include_directories. Sernivîsên ji çarçoveya testê û ji ya me Mylib::mylib, û her weha pîvanên çêkirinê (di rewşa me de, ev standarda zimanê C++ ye) bi van armancan re derbas bûn.

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

Di dawiyê de, em armancek dumî diafirînin, ku "avakirin" ya ku bi ceribandinên xebitandinê re wekhev e, û vê armancê li avahiya xwerû zêde dikin (taybet ji vê yekê berpirsiyar e ALL). Ev tê vê wateyê ku avakirina xwerû ceribandinan dide meşandin, ango em ê tu carî ji bîr nekin ku wan bimeşînin.

add_custom_target(check ALL COMMAND mylib-unit-tests)

Coating

Dûv re, heke vebijarka guncan were destnîşankirin, em pîvana vegirtina kodê çalak dikin. Ez ê neçim nav hûrguliyan, ji ber ku ew ji CMake bêtir bi amûrek ji bo pîvandinê ve girêdayî ne. Tenê girîng e ku were zanîn ku li gorî encaman dê armancek were afirandin coverage, ku pê re hêsan e ku meriv dest bi pîvandina vegirtinê bike.

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()

Skrîpta ji bo belgekirinê (doc/CMakeLists.txt)

Doxygen tê dîtin.

find_package(Doxygen)

Dûv re, em kontrol dikin ka bikarhêner guhêrbar zimanî saz kiriye yan na. Ger erê, wê hingê em dest nadin wê, heke na, wê hingê em rûsî digirin. Dûv re em pelên pergala doxygen-ê mîheng bikin. Hemî guhêrbarên pêwîst, tevî ziman, di pêvajoya veavakirinê de diçin wir (binêre. команду configure_file).

Piştre em armancek çêbikin doc, ku dê dest bi hilberîna belgeyan bike. Ji ber ku di pêvajoya pêşkeftinê de hilberîna belgekirinê ne hewcedariya herî mezin e, armanc dê ji hêla xwerû ve neyê çalak kirin; pêdivî ye ku ew bi eşkere were destpêkirin.

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 ()

Skrîpta ji bo sandboxa serhêl (serhêl/CMakeLists.txt)

Li vir em Python-a sêyemîn dibînin û armancek diafirînin wandbox, ku daxwazek bi karûbarê API-ê re têkildar çêdike Wandbox, û wî dişîne. Bersiv bi girêdanek bi sandboxa qediyayî tê.

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()

Proje li derve

Naha em binihêrin ka meriv van hemîyan çawa bikar tîne.

Meclîsa

Avakirina vê projeyê, mîna her projeyek din a li ser pergala avakirina CMake, ji du qonaxan pêk tê:

Bend

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

Ger fermana li jor ji ber guhertoyek kevn a CMake nexebitî, biceribînin -S:

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

Zêdetir li ser vebijarkan.

Avakirina projeyê

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

Zêdetir li ser armancên civînê.

Vebijarkên

MYLIB_COVERAGE

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

Hedef tê de ye coverage, bi ku hûn dikarin bi ceribandinan dest bi pîvana vegirtina kodê bikin.

MYLIB_TESTING

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

Kapasîteya neçalakkirina avakirina ceribandin û armancê ya yekîneyê peyda dike check. Wekî encamek, pîvana vegirtina kodê ji hêla ceribandinan ve tê girtin (binêre. MYLIB_COVERAGE).

Ger proje bi projeyek din ve wekî bineprojeyek bi karanîna fermanê ve were girêdan ceribandin jî bixweber tê asteng kirin add_subdirectory.

MYLIB_DOXYGEN_LANGUAGE

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

Zimanê belgeyên ku armanc diafirîne diguherîne doc ji yekê re hatî dayîn. Ji bo navnîşek zimanên berdest, binêre Malpera pergala Doxygen.

Rûsî ji hêla xwerû ve çalak e.

Meclîsê hedef dike

by default

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

Ger armanc neyê diyar kirin (ku bi armancê re wekhev e all), her tiştê ku dikare berhev dike, û di heman demê de gazî armancê jî dike check.

mylib-unit-tests

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

Testên yekîneyê berhev dike. Ji hêla xwerû ve hatî çalak kirin.

berçavkirinî

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

Testên yekîneya berhevkirî (hevkirî, heke ne jixwe) dimeşîne. Ji hêla xwerû ve hatî çalak kirin.

jî bibînin mylib-unit-tests.

Nêzîkatîya

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

Ji bo vegirtina kodê bi ceribandinên bi karanîna bernameyê ve ceribandinên yekîneyê dimeşîne (dibe, heke ne jixwe) analîz dike gcovr.

Avêtina pêlavê dê bi vî rengî xuya bike:

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

Armanc tenê dema ku vebijark were çalak kirin heye MYLIB_COVERAGE.

jî bibînin check.

doc

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

Bi karanîna pergalê dest bi hilberîna belgeya kodê dike Oksîjenê.

wandbox

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

Bersiva ji karûbarê tiştek bi vî rengî xuya dike:

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

Ji bo vê xizmetê tê bikaranîn Wandbox. Ez nizanim serverên wan çiqas maqûl in, lê ez difikirim ku divê ev derfet neyê xirab kirin.

wergerandî

Projeyê di moda debugê de bi pîvana vegirtinê ava bikin

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

Sazkirina projeyek bêyî kombûn û ceribandina pêşîn

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

Di moda berdanê de bi berhevkarek diyarkirî ve ava bikin

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

Çêkirina belgeyên bi Îngilîzî

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

Amûr

  1. CMake 3.13

    Bi rastî, guhertoya CMake 3.13 tenê hewce ye ku hin fermanên konsolê yên ku di vê arîkariyê de hatine destnîşan kirin bimeşîne. Ji hêla hevoksaziya nivîsarên CMake ve, ger nifş bi awayên din were gazî kirin guhertoya 3.8 bes e.

  2. Pirtûkxaneya ceribandinê doctest

    Testkirin dikare bête asteng kirin (binêre опцию MYLIB_TESTING).

  3. Oksîjenê

    Ji bo guheztina zimanê ku dê belgename lê were çêkirin, vebijarkek tê peyda kirin MYLIB_DOXYGEN_LANGUAGE.

  4. Wergêrê ziman python 3

    Ji bo hilberîna otomatîk sandboxên serhêl.

Analîza statîk

Bi CMake û çend amûrên baş, hûn dikarin bi hewildanek hindiktirîn analîza statîk peyda bikin.

Cppcheck

CMake ji bo amûrek analîzek statîk piştgirî heye Cppcheck.

Ji bo vê yekê hûn hewce ne ku vebijarkê bikar bînin CMAKE_CXX_CPPCHECK:

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

Piştî vê yekê, analîza statîk dê her gava ku çavkanî were berhev kirin û ji nû ve hatî berhev kirin bixweber were destpêkirin. Ne hewce ye ku tiştek zêde were kirin.

cang

Bi alîkariya amûrek ecêb scan-build Her weha hûn dikarin di demek kurt de analîza statîk bimeşînin:

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

Li vir, berevajî doza Cppcheck, hûn hewce ne ku her carê avakirinê bi rê ve bibin scan-build.

Paşê

CMake pergalek pir bi hêz û maqûl e ku dihêle hûn ji bo her çêj û reng fonksiyonê bicîh bînin. Û, her çend hevoksazî carinan gelek tiştan dixwaze, şeytan dîsa jî ne bi qasî ku hatî boyaxkirin ne tirsnak e. Pergala avakirina CMake ji bo berjewendiya civak û tenduristiyê bikar bînin.

Şablona projeyê dakêşin

Source: www.habr.com

Add a comment