CMake u C++ huma aħwa għal dejjem

CMake u C++ huma aħwa għal dejjem

Matul l-iżvilupp, inħobb nibdel il-kompilaturi, nibni modi, verżjonijiet tad-dipendenza, inwettaq analiżi statika, inkejjel il-prestazzjoni, niġbor kopertura, niġġenera dokumentazzjoni, eċċ. U nħobb ħafna lil CMake għax jippermettili nagħmel dak kollu li nixtieq.

Ħafna nies jikkritikaw lil CMake, u ħafna drabi ħaqqhom, imma jekk tħares lejha, ​​mhux kollox huwa daqshekk ħażin, u dan l-aħħar mhux ħażin xejn, u d-direzzjoni tal-iżvilupp hija pjuttost pożittiva.

F'din in-nota, irrid ngħidlek kif sempliċiment torganizza librerija header f'C++ fis-sistema CMake biex tikseb il-funzjonalità li ġejja:

  1. Assemblea;
  2. Testijiet ta' awtorun;
  3. Kejl tal-kopertura tal-kodiċi;
  4. Installazzjoni;
  5. Awtodokumentazzjoni;
  6. Ġenerazzjoni ta' sandbox onlajn;
  7. Analiżi statika.

Kull min diġà jifhem il-vantaġġi u C-make jista 'sempliċement Niżżel il-mudell tal-proġett u tibda tużaha.


Kontenut

  1. Proġett minn ġewwa
    1. Struttura tal-proġett
    2. Fajl ewlieni CMake (./CMakeLists.txt)
      1. Informazzjoni dwar il-proġett
      2. Għażliet tal-Proġett
      3. Għażliet ta' kumpilazzjoni
      4. għan primarju
      5. Installazzjoni
      6. Testijiet
      7. Dokumentazzjoni
      8. Sandbox onlajn
    3. Iskript tat-test (test/CMakeLists.txt)
      1. Ittestjar
      2. Kisi
    4. Skript għad-dokumentazzjoni (doc/CMakeLists.txt)
    5. Skript għal sandbox onlajn (online/CMakeLists.txt)
  2. Proġett barra
    1. Assemblea
      1. Ġenerazzjoni
      2. Assemblea
    2. Għażliet
      1. MYLIB_KOPERTURA
      2. MYLIB_TESTING
      3. MYLIB_DOXYGEN_LANGUAGE
    3. Miri tal-assemblaġġ
      1. Permezz ta 'default
      2. mylib-unit-tests
      3. check
      4. kopertura
      5. doc
      6. kaxxa tal-bastun
    4. eżempji
  3. Għodod
  4. Analiżi statika
  5. Wara kelma

Proġett minn ġewwa

Struttura tal-proġett

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

Se nitkellmu prinċipalment dwar kif norganizzaw l-iskripts CMake, għalhekk se jiġu diskussi fid-dettall. Kulħadd jista 'jara l-bqija tal-fajls direttament fuq il-paġna tal-proġett tal-mudell.

Fajl ewlieni CMake (./CMakeLists.txt)

Informazzjoni dwar il-proġett

L-ewwelnett, għandek bżonn titlob il-verżjoni meħtieġa tas-sistema CMake. CMake qed jevolvi, il-firem tal-kmand u l-imġieba f'kundizzjonijiet differenti qed jinbidlu. Sabiex CMake jifhem immedjatament dak li rridu minnu, irridu nirreġistraw immedjatament ir-rekwiżiti tagħna għaliha.

cmake_minimum_required(VERSION 3.13)

Imbagħad aħna se nnominaw il-proġett tagħna, l-isem tiegħu, il-verżjoni, il-lingwi użati, eċċ. (ara. команду project).

F'dan il-każ aħna nindikaw il-lingwa CXX (u dan ifisser C++) sabiex CMake ma tisforzax u tfittex kompilatur tal-lingwa C (b'mod awtomatiku, CMake jinkludi żewġ lingwi: C u C++).

project(Mylib VERSION 1.0 LANGUAGES CXX)

Hawnhekk tista' tiċċekkja immedjatament jekk il-proġett tagħna huwiex inkluż fi proġett ieħor bħala sottoproġett. Dan se jgħin ħafna fil-futur.

get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)

Għażliet tal-Proġett

Aħna ser nipprovdu żewġ għażliet.

L-ewwel għażla hija MYLIB_TESTING — biex jiġu diżattivati ​​testijiet tal-unità. Dan jista 'jkun meħtieġ jekk aħna żgur li kollox huwa fl-ordni mat-testijiet, iżda rridu biss, pereżempju, li ninstallaw jew jippakkjaw il-proġett tagħna. Jew il-proġett tagħna huwa inkluż bħala sottoproġett - f'dan il-każ, l-utent tal-proġett tagħna mhuwiex interessat li jmexxi t-testijiet tagħna. Ma tittestjax id-dipendenzi li tuża, hux?

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

Barra minn hekk, se nagħmlu għażla separata MYLIB_COVERAGE għall-kejl tal-kopertura tal-kodiċi permezz tat-testijiet, iżda se teħtieġ għodod addizzjonali, għalhekk jeħtieġ li tkun attivata b'mod espliċitu.

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

Għażliet ta' kumpilazzjoni

Naturalment, aħna programmaturi jibred flimkien, għalhekk irridu l-livell massimu ta 'dijanjostika tal-kompilazzjoni mill-kompilatur. Mhux ġurdien wieħed se jiżloq.

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
)

Se niskonnettjaw ukoll l-estensjonijiet sabiex inkunu konformi bis-sħiħ mal-istandard tal-lingwa C++. Huma attivati ​​awtomatikament f'CMake.

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

għan primarju

Il-librerija tagħna tikkonsisti biss minn fajls header, li jfisser li m'għandna l-ebda exhaust fil-forma ta 'libreriji statiċi jew dinamiċi. Min-naħa l-oħra, sabiex tuża l-librerija tagħna esternament, jeħtieġ li tkun installata, jeħtieġ li tkun skoperta fis-sistema u konnessa mal-proġett tiegħek, u fl-istess ħin dawn l-istess headers, kif ukoll possibilment xi oħrajn addizzjonali, huma mwaħħla magħha proprjetajiet.

Għal dan il-għan, noħolqu librerija ta 'interface.

add_library(mylib INTERFACE)

Aħna norbtu headers mal-librerija tal-interface tagħna.

L-użu modern, moda, taż-żgħażagħ ta 'CMake jimplika li headers, proprjetajiet, eċċ. trażmessi permezz ta' mira waħda. Allura biżżejjed ngħid target_link_libraries(target PRIVATE dependency), u l-intestaturi kollha li huma assoċjati mal-mira dependency, se jkunu disponibbli għal sorsi li jappartjenu għall-mira target. U m'għandek bżonn l-ebda [target_]include_directories. Dan se jintwera hawn taħt fl-analiżi CMake script għal testijiet tal-unità.

Ta 'min ukoll tagħti attenzjoni lill-hekk imsejħa. выражения-генераторы: $<...>.

Dan il-kmand jassoċja l-headers li neħtieġu mal-librerija tal-interface tagħna, u jekk il-librerija tagħna hija konnessa ma 'kwalunkwe mira fi ħdan l-istess ġerarkija CMake, allura l-headers mid-direttorju jkunu assoċjati magħha ${CMAKE_CURRENT_SOURCE_DIR}/include, u jekk il-librerija tagħna hija installata fuq is-sistema u konnessa ma 'proġett ieħor billi tuża l-kmand find_package, imbagħad headers mid-direttorju jkunu assoċjati magħha include relattiv għad-direttorju tal-installazzjoni.

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

Ejja nistabbilixxu standard tal-lingwa. Naturalment, l-aħħar waħda. Fl-istess ħin, aħna mhux biss jinkludu l-istandard, iżda wkoll jestenduh għal dawk li se jużaw il-librerija tagħna. Dan jinkiseb minħabba l-fatt li l-proprjetà stabbilita għandha kategorija INTERFACE (Ara kmand ta' target_compile_features).

target_compile_features(mylib INTERFACE cxx_std_17)

Ejja noħolqu alias għal-librerija tagħna. Barra minn hekk, għas-sbuħija, se jkun fi "namespace" speċjali. Dan se jkun utli meta moduli differenti jidhru fil-librerija tagħna, u mmorru nikkonnettjawhom indipendentement minn xulxin. Bħal fil-Busta, pereżempju.

add_library(Mylib::mylib ALIAS mylib)

Installazzjoni

L-installazzjoni tal-headers tagħna fis-sistema. Kollox huwa sempliċi hawn. Aħna ngħidu li l-folder bl-headers kollha għandu jidħol fid-direttorju include relattiv għall-post tal-installazzjoni.

install(DIRECTORY include/mylib DESTINATION include)

Sussegwentement, ninfurmaw lis-sistema tal-bini li rridu nkunu nistgħu nsejħu l-kmand fi proġetti ta 'partijiet terzi find_package(Mylib) u tikseb gowl Mylib::mylib.

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

Il-kelma li jmiss għandha tinftiehem b'dan il-mod. Meta fi proġett ta 'parti terza nsejħu l-kmand find_package(Mylib 1.2.3 REQUIRED), u l-verżjoni reali tal-librerija installata se tkun inkompatibbli mal-verżjoni 1.2.3CMake awtomatikament jiġġenera żball. Jiġifieri, mhux ser ikollok bżonn issegwi l-verżjonijiet manwalment.

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)

Testijiet

Jekk it-testijiet huma diżattivati ​​espliċitament bl-użu għażla korrispondenti jew il-proġett tagħna huwa sottoproġett, jiġifieri, huwa konness ma 'proġett CMake ieħor bl-użu tal-kmand add_subdirectory, aħna ma nimxu aktar tul il-ġerarkija, u l-iskrittura, li tiddeskrivi l-kmandi għall-ġenerazzjoni u t-tmexxija tat-testijiet, sempliċement ma taħdem.

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

Dokumentazzjoni

Dokumentazzjoni lanqas ma tiġi ġġenerata fil-każ ta’ sottoproġett.

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

Sandbox onlajn

Bl-istess mod, is-sottoproġett lanqas se jkollu sandbox online.

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

Iskript tat-test (test/CMakeLists.txt)

Ittestjar

L-ewwelnett, insibu pakkett bil-qafas tat-test meħtieġ (issostitwixxi b'wieħed favorit tiegħek).

find_package(doctest 2.3.3 REQUIRED)

Ejja noħolqu l-fajl eżekutibbli tagħna bit-testijiet. Normalment inżid direttament mal-binarju eżekutibbli biss il-fajl li jkun fih il-funzjoni main.

add_executable(mylib-unit-tests test_main.cpp)

U nżid fajls li fihom it-testijiet infushom huma deskritti aktar tard. Imma m'għandekx għalfejn tagħmel dan.

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

Aħna nikkollegaw id-dipendenzi. Jekk jogħġbok innota li għaqqadna biss il-miri CMake li kellna bżonn mal-binarju tagħna u ma sejjaħx il-kmand target_include_directories. Intestaturi mill-qafas tat-test u minn tagħna Mylib::mylib, kif ukoll jibnu parametri (fil-każ tagħna, dan huwa l-istandard tal-lingwa C++) wasal flimkien ma 'dawn l-għanijiet.

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

Fl-aħħarnett, noħolqu mira finta, li l-“bini” tagħha hija ekwivalenti għat-twettiq tat-testijiet, u żid din il-mira mal-bini default (l-attribut huwa responsabbli għal dan ALL). Dan ifisser li l-kostruzzjoni default tixpruna t-testijiet biex imexxu, jiġifieri qatt ma ninsew li nħaddmuhom.

add_custom_target(check ALL COMMAND mylib-unit-tests)

Kisi

Sussegwentement, nippermettu l-kejl tal-kopertura tal-kodiċi jekk tkun speċifikata l-għażla xierqa. Mhux se nidħol fid-dettalji, għax huma jirrelataw aktar ma 'għodda għall-kejl tal-kopertura milli ma' CMake. Huwa importanti biss li wieħed jinnota li abbażi tar-riżultati se tinħoloq mira coverage, li biha huwa konvenjenti li tibda tkejjel il-kopertura.

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

Skript għad-dokumentazzjoni (doc/CMakeLists.txt)

Doxygen misjub.

find_package(Doxygen)

Sussegwentement, niċċekkjaw jekk l-utent stabbilixxax il-varjabbli tal-lingwa. Jekk iva, allura ma nmissux, jekk le, allura nieħdu r-Russu. Imbagħad aħna kkonfigurat il-fajls tas-sistema Doxygen. Il-varjabbli kollha meħtieġa, inkluża l-lingwa, imorru hemm matul il-proċess tal-konfigurazzjoni (ara. команду configure_file).

Imbagħad noħolqu għan doc, li se tibda tiġġenera dokumentazzjoni. Peress li l-ġenerazzjoni tad-dokumentazzjoni mhijiex l-akbar ħtieġa fil-proċess ta 'żvilupp, il-mira mhux se tkun attivata b'mod awtomatiku; se jkollha tiġi mnedija b'mod espliċitu.

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

Skript għal sandbox onlajn (online/CMakeLists.txt)

Hawnhekk insibu t-tielet Python u noħolqu mira wandbox, li tiġġenera talba li tikkorrispondi għall-API tas-servizz Wandbox, u jibagħtu 'l bogħod. Ir-rispons jiġi b'rabta mal-kaxxa tar-ramel lest.

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

Proġett barra

Issa ejja nħarsu lejn kif tuża dan kollu.

Assemblea

Il-bini ta' dan il-proġett, bħal kull proġett ieħor fuq is-sistema tal-bini CMake, jikkonsisti f'żewġ stadji:

Ġenerazzjoni

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

Jekk il-kmand ta 'hawn fuq ma ħadimx minħabba verżjoni antika ta' CMake, ipprova ħalli barra -S:

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

Aktar dwar l-għażliet.

Bini tal-proġett

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

Aktar dwar l-għanijiet tal-assemblaġġ.

Għażliet

MYLIB_KOPERTURA

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

Jinkludi mira coverage, li biha tista' tibda tkejjel il-kopertura tal-kodiċi permezz ta' testijiet.

MYLIB_TESTING

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

Jipprovdi l-abbiltà li tiddiżattiva l-bini tat-test tal-unità u l-mira check. Bħala riżultat, il-kejl tal-kopertura tal-kodiċi permezz tat-testijiet huwa mitfi (ara. MYLIB_COVERAGE).

L-ittestjar huwa wkoll awtomatikament diżattivat jekk il-proġett ikun imqabbad ma 'proġett ieħor bħala sottoproġett bl-użu tal-kmand add_subdirectory.

MYLIB_DOXYGEN_LANGUAGE

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

Taqleb il-lingwa tad-dokumentazzjoni li tiġġenera l-mira doc lil dak mogħti. Għal lista tal-lingwi disponibbli, ara Websajt tas-sistema Doxygen.

Ir-Russu huwa attivat awtomatikament.

Miri tal-assemblaġġ

Permezz ta 'default

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

Jekk il-mira ma tkunx speċifikata (li hija ekwivalenti għall-mira all), jiġbor dak kollu li jista’, u jsejjaħ ukoll il-mira check.

mylib-unit-tests

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

Jikkompila testijiet tal-unità. Ippermettiet awtomatikament.

check

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

Tmexxi t-testijiet tal-unità miġbura (miġbura, jekk mhux diġà). Ippermettiet awtomatikament.

Ara wkoll mylib-unit-tests.

kopertura

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

Janalizza testijiet tal-unità li qed imexxu (jagħmel, jekk mhux diġà) għall-kopertura tal-kodiċi permezz ta 'testijiet bl-użu tal-programm gcovr.

L-exhaust tal-kisi se jidher xi ħaġa bħal din:

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

Il-mira hija disponibbli biss meta l-għażla tkun attivata MYLIB_COVERAGE.

Ara wkoll check.

doc

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

Jibda l-ġenerazzjoni tad-dokumentazzjoni tal-kodiċi bl-użu tas-sistema Ossiġenu.

kaxxa tal-bastun

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

Ir-rispons mis-servizz jidher xi ħaġa bħal din:

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

Is-servizz jintuża għal dan Wandbox. Ma nafx kemm huma flessibbli s-servers tagħhom, imma naħseb li din l-opportunità m'għandhiex tiġi abbużata.

eżempji

Ibni l-proġett fil-modalità debug bil-kejl tal-kopertura

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

Installazzjoni ta 'proġett mingħajr assemblaġġ preliminari u ttestjar

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

Ibni fil-mod ta 'rilaxx b'kompilatur partikolari

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

Ġenerazzjoni ta' dokumentazzjoni bl-Ingliż

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

Għodod

  1. CMake 3.13

    Fil-fatt, il-verżjoni CMake 3.13 hija meħtieġa biss biex tħaddem xi wħud mill-kmandi tal-console deskritti f'din l-għajnuna. Mil-lat tas-sintassi tal-iskripts CMake, il-verżjoni 3.8 hija biżżejjed jekk il-ġenerazzjoni tissejjaħ b'modi oħra.

  2. Librerija tal-ittestjar dottest

    L-ittestjar jista’ jiġi diżattivat (ara опцию MYLIB_TESTING).

  3. Ossiġenu

    Biex taqleb il-lingwa li biha se tiġi ġġenerata d-dokumentazzjoni, tiġi pprovduta għażla MYLIB_DOXYGEN_LANGUAGE.

  4. Interpretu tal-lingwa python 3

    Għall-ġenerazzjoni awtomatika kaxxi tar-ramel onlajn.

Analiżi statika

B'CMake u koppja ta 'għodod tajbin, tista' tipprovdi analiżi statika bi sforz minimu.

Cppcheck

CMake għandu appoġġ integrat għal għodda ta 'analiżi statika Cppcheck.

Biex tagħmel dan għandek bżonn tuża l-għażla CMAKE_CXX_CPPCHECK:

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

Wara dan, l-analiżi statika titnieda awtomatikament kull darba li s-sors jiġi kkompilat u kkompilat mill-ġdid. M'hemmx għalfejn tagħmel xi ħaġa addizzjonali.

Ħoss

Bl-għajnuna ta 'għodda mill-isbaħ scan-build Tista' wkoll tmexxi analiżi statika fi ftit ħin:

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

Hawnhekk, b'differenza mill-każ b'Cppcheck, għandek bżonn tmexxi l-bini kull darba scan-build.

Wara kelma

CMake hija sistema qawwija u flessibbli ħafna li tippermettilek timplimenta funzjonalità għal kull togħma u kulur. U, għalkemm is-sintassi kultant tħalli ħafna x’xewqat, ix-xitan għadu mhux terribbli daqs kemm hu miżbugħ. Uża s-sistema CMake build għall-benefiċċju tas-soċjetà u s-saħħa.

Niżżel il-mudell tal-proġett

Sors: www.habr.com

Żid kumment