CMake le C ++ ke bara ba motho ka ho sa feleng

CMake le C ++ ke bara ba motho ka ho sa feleng

Nakong ea nts'etsopele, ke rata ho fetola li-compilers, ho aha mekhoa, liphetolelo tsa ho itšetleha, ho etsa tlhahlobo e tsitsitseng, ho lekanya ts'ebetso, ho bokella tšireletso, ho hlahisa litokomane, joalo-joalo. 'Me ke hlile ke rata CMake hobane e ntumella ho etsa sohle seo ke se batlang.

Batho ba bangata ba nyatsa CMake, 'me hangata ho loketse joalo, empa ha u e sheba, ha se ntho e' ngoe le e 'ngoe e mpe haholo, mme haufinyane tjena. e seng mpe ho hang, 'me tataiso ea tsoelo-pele e ntle haholo.

Lengolong lena, ke batla ho u joetsa mokhoa oa ho hlophisa laeborari ea lihlooho ho C++ ho sistimi ea CMake ho fumana ts'ebetso e latelang:

  1. Kopano;
  2. liteko tsa Autorun;
  3. Tekanyo ea khaso ea khoutu;
  4. Ho kenya;
  5. Auto-documentation;
  6. Ho hlahisa sandbox ea inthaneteng;
  7. Tlhahlobo e tsitsitseng.

Mang kapa mang ea seng a ntse a utloisisa melemo le C-make a ka khona habonolo khoasolla template ea morero ebe o qala ho e sebelisa.


Tse ka hare

  1. Morero ho tsoa ka hare
    1. Sebopeho sa morero
    2. Faele e kholo ea CMake (./CMakeLists.txt)
      1. Lintlha tsa morero
      2. Dikgetho tsa morero
      3. Likhetho tsa ho bokella
      4. sepheo sa mantlha
      5. bophirima
      6. Liteko
      7. Litokomane
      8. Sandbox ea inthaneteng
    3. Mongolo oa teko (test/CMakeLists.txt)
      1. Teko
      2. Ho apara
    4. Script bakeng sa litokomane (doc/CMakeLists.txt)
    5. Script bakeng sa sandbox ea inthaneteng (inthaneteng/CMakeLists.txt)
  2. Morero ka ntle
    1. Kopano
      1. Moloko
      2. Kopano
    2. Khetho
      1. MYLIB_KAKARETSO
      2. MYLIB_TESTING
      3. MYLIB_DOXYGEN_LANGUAGE
    3. Lipheo tsa kopano
      1. ke default
      2. mylib-unit-test
      3. hlahloba
      4. Boitsebiso
      5. doc
      6. wandbox
    4. mehlala
  3. Lisebelisoa
  4. Tlhahlobo e tsitsitseng
  5. Afterword

Morero ho tsoa ka hare

Sebopeho sa morero

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

Re tla bua haholo ka mokhoa oa ho hlophisa lingoloa tsa CMake, kahoo li tla tšohloa ka botlalo. Mang kapa mang a ka sheba lifaele tse ling ka kotloloho leqepheng la morero oa template.

Faele e kholo ea CMake (./CMakeLists.txt)

Lintlha tsa morero

Pele ho tsohle, o hloka ho kopa mofuta o hlokahalang oa sistimi ea CMake. CMake e ntse e fetoha, li-signature tsa litaelo le boitšoaro maemong a fapaneng lia fetoha. E le hore CMake e utloisise hang-hang seo re se batlang ho eona, re hloka ho tlaleha litlhoko tsa rona hang-hang.

cmake_minimum_required(VERSION 3.13)

Ebe re khetha projeke ea rona, lebitso la eona, mofuta, lipuo tse sebelisitsoeng, joalo-joalo (bona. команду project).

Tabeng ena re bontša puo CXX ('me sena se bolela C++) e le hore CMake e se ke ea khathatsa le ho batla moqapi oa puo ea C (ka ho feletseng, CMake e kenyelletsa lipuo tse peli: C le C ++).

project(Mylib VERSION 1.0 LANGUAGES CXX)

Mona o ka hlahloba hang-hang hore na morero oa rona o kenyelelitsoe morerong o mong e le subproject. Sena se tla thusa haholo nakong e tlang.

get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)

Dikgetho tsa morero

Re tla fana ka likhetho tse peli.

Khetho ea pele ke MYLIB_TESTING — ho tima diteko tsa diyuniti. Sena se ka 'na sa hlokahala haeba re kholisehile hore ntho e' ngoe le e 'ngoe e tsamaisana le liteko, empa re batla feela, ka mohlala, ho kenya kapa ho paka morero oa rona. Kapa morero oa rona o kenyelelitsoe e le morero - tabeng ena, mosebedisi oa morero oa rona ha a thahaselle ho etsa liteko tsa rona. Ha u leke litšepiso tseo u li sebelisang, na ha ho joalo?

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

Ho phaella moo, re tla etsa khetho e arohaneng MYLIB_COVERAGE bakeng sa ho lekanya tšireletso ea khoutu ka liteko, empa e tla hloka lisebelisoa tse eketsehileng, kahoo e tla hloka ho lumelloa ka ho hlaka.

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

Likhetho tsa ho bokella

Ehlile, re baetsi ba mananeo ba pholileng, ka hona re batla boemo bo holimo ba tlhahlobo ea nako ea ho bokella ho tsoa ho motlatsi. Ha ho toeba e le 'ngoe e tla thella.

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
)

Hape re tla tima li-extensions molemong oa ho ikamahanya le maemo a puo ea C++ ka botlalo. Li lumelloa ka ho sa feleng ho CMake.

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

sepheo sa mantlha

Laeborari ea rona e na le lifaele tsa lihlooho feela, ho bolelang hore ha re na mokhathala leha e le ofe ka mokhoa oa lilaebrari tse tsitsitseng kapa tse sebetsang. Ka lehlakoreng le leng, molemong oa ho sebelisa laeborari ea rona kantle ho naha, e hloka ho kengoa, e hloka ho bonoa ka har'a sistimi mme e hokahane le projeke ea hau, 'me ka nako e ts'oanang lihlooho tsena, hammoho le tse ling tse ling, li khomaretsoe ho eona thepa.

Bakeng sa morero ona, re theha laebrari ea li-interface.

add_library(mylib INTERFACE)

Re kopanya lihlooho ho laeborari ea rona ea li-interface.

Tšebeliso ea sejoale-joale, ea feshene, ea bacha ea CMake e bolela hore lihlooho, thepa, joalo-joalo. e fetisoa ka sepheo se le seng. Kahoo ho lekane ho bua target_link_libraries(target PRIVATE dependency), le lihlooho tsohle tse amanang le sepheo dependency, e tla ba teng bakeng sa mehloli eo e leng ea sepheo target. 'Me ha u hloke letho [target_]include_directories. Sena se tla bontšoa ka tlase tlhahlobong CMake script bakeng sa liteko tsa yuniti.

Hape ke habohlokoa ho ela hloko seo ho thoeng ke. выражения-генераторы: $<...>.

Taelo ena e amahanya lihlooho tseo re li hlokang le laeborari ea rona ea li-interface, 'me haeba laeborari ea rona e hokahane le sepheo sefe kapa sefe ka har'a sehlopha se tšoanang sa CMake, joale lihlooho tse tsoang bukeng li tla amahanngoa le eona. ${CMAKE_CURRENT_SOURCE_DIR}/include, le haeba laebrari ea rona e kentsoe tsamaisong 'me e hokahane le morero o mong o sebelisa taelo find_package, joale lihlooho tse tsoang bukeng li tla amahanngoa le eona include e amanang le buka ea ho kenya.

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

Ha re beheng maemo a puo. Ehlile, ea ho qetela. Ka nako e ts'oanang, ha re kenyelletse maemo a tloaelehileng feela, empa hape re a fetisetsa ho ba tla sebelisa laeborari ea rona. Sena se finyelloa ka lebaka la hore thepa e behiloeng e na le sehlopha INTERFACE (Bona target_compile_features taelo).

target_compile_features(mylib INTERFACE cxx_std_17)

Ha re theheng lebitso la bokhoba la rona. Ho feta moo, bakeng sa botle, e tla ba "sebakeng sa mabitso" se khethehileng. Sena se tla ba molemo ha li-module tse fapaneng li hlaha laeboraring ea rona, 'me re ea ho li hokela re sa ipapise le tse ling. Joalo ka Busta, mohlala.

add_library(Mylib::mylib ALIAS mylib)

bophirima

Ho kenya lihlooho tsa rona ho sistimi. Ntho e 'ngoe le e' ngoe e bonolo mona. Re re foldara e nang le lihlooho tsohle e lokela ho kena bukeng include e amanang le sebaka sa ho kenya.

install(DIRECTORY include/mylib DESTINATION include)

Ka mor'a moo, re tsebisa tsamaiso ea kaho eo re batlang ho khona ho e bitsa taelo mererong ea batho ba bang find_package(Mylib) mme o fumane sepheo Mylib::mylib.

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

Polelo e latelang e lokela ho utloisisoa ka tsela ena. Ha re le morerong oa motho oa boraro re bitsa taelo find_package(Mylib 1.2.3 REQUIRED), 'me phetolelo ea sebele ea laebrari e kentsoeng e ke ke ea lumellana le phetolelo 1.2.3CMake e tla iketsetsa phoso. Ke hore, ha ho hlokahale hore u latele liphetolelo ka letsoho.

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)

Liteko

Haeba liteko li emisitsoe ka mokhoa o hlakileng khetho e tsamaellanang kapa morero oa rona ke subproject, ke hore, o hokahane le morero o mong oa CMake o sebelisa taelo add_subdirectory, ha re fetele pele ho latela maemo a phahameng, 'me script, e hlalosang litaelo tsa ho hlahisa le ho etsa liteko, ha e sebetse feela.

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

Litokomane

Litokomane le tsona li ke ke tsa hlahisoa molemong oa morero o monyenyane.

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

Sandbox ea inthaneteng

Ka mokhoa o ts'oanang, subproject e ke ke ea ba le sandbox ea inthaneteng le eona.

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

Mongolo oa teko (test/CMakeLists.txt)

Teko

Pele ho tsohle, re fumana sephutheloana se nang le moralo o hlokahalang oa tlhahlobo (fetola sebaka seo u se ratang haholo).

find_package(doctest 2.3.3 REQUIRED)

Ha re theheng faele ea rona e sebetsang ka liteko. Hangata ke eketsa ka ho toba ho binary e sebetsang feela faele e tla ba le mosebetsi main.

add_executable(mylib-unit-tests test_main.cpp)

'Me ke eketsa lifaele tseo ho tsona liteko ka botsona li hlalosoang hamorao. Empa ha o a tlameha ho etsa joalo.

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

Re kopanya litšepe. Ka kopo hlokomela hore re hokahane feela le lipheo tsa CMake tseo re li hlokang ho binary ea rona mme ha rea ​​ka ra bitsa taelo target_include_directories. Lihlooho tse tsoang ho moralo oa liteko le tsa rona Mylib::mylib, hammoho le mekhoa ea ho haha ​​(ho rona, ena ke tekanyetso ea puo ea C ++) e fihlile hammoho le lipakane tsena.

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

Qetellong, re theha sepheo sa dummy, "mohaho" oa eona o lekanang le liteko tse sebetsang, 'me re eketsa sepheo sena ho mohaho oa kamehla (semelo se ikarabella bakeng sa sena. ALL). Sena se bolela hore sebopeho sa kamehla se etsa hore liteko li sebetse, ho bolelang hore re ke ke ra lebala ho li tsamaisa.

add_custom_target(check ALL COMMAND mylib-unit-tests)

Ho apara

Ka mor'a moo, re nolofalletsa tekanyo ea tšireletso ea khoutu haeba khetho e nepahetseng e hlalositsoe. Nke ke ka bua ka lintlha, hobane li amana haholo le sesebelisoa sa ho lekanya sekoaelo ho feta CMake. Ke habohlokoa feela ho hlokomela hore ho itšetlehile ka liphello sepheo se tla etsoa coverage, eo ho leng bonolo ho qala ka eona ho lekanya tšireletso.

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

Script bakeng sa litokomane (doc/CMakeLists.txt)

Ho fumanoa Doxygen.

find_package(Doxygen)

Ka mor'a moo, re hlahloba hore na mosebedisi o behile phapang ea puo. Haeba ho joalo, joale ha re e ame, haeba ho se joalo, joale re nka Serussia. Ebe re hlophisa lifaele tsa sistimi ea Doxygen. Liphetoho tsohle tse hlokahalang, ho kenyeletsoa puo, li ea moo nakong ea ts'ebetso ea tlhophiso (bona. команду configure_file).

Ebe re theha sepheo doc, e tla qala ho hlahisa litokomane. Kaha ho hlahisa litokomane ha se tlhoko e kholo ka ho fetisisa ts'ebetsong ea nts'etsopele, sepheo se ke ke sa etsoa ka mokhoa oa kamehla; se tla tlameha ho hlahisoa ka mokhoa o hlakileng.

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

Script bakeng sa sandbox ea inthaneteng (inthaneteng/CMakeLists.txt)

Mona re fumana Python ea boraro mme re theha sepheo wandbox, e hlahisang kopo e lumellanang le API ea tšebeletso Wandbox, mme a mo lese. Karabo e tla le sehokelo sa sandbox e felileng.

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

Morero ka ntle

Joale a re shebeng mokhoa oa ho sebelisa sena sohle.

Kopano

Ho aha morero ona, joalo ka projeke efe kapa efe ho sistimi ea kaho ea CMake, e na le mekhahlelo e 'meli:

Moloko

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

Haeba taelo e ka holimo e sa sebetse ka lebaka la mofuta oa khale oa CMake, leka ho siea -S:

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

Tse ling mabapi le likhetho.

Ho aha morero

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

Tse ling mabapi le lipakane tsa kopano.

Khetho

MYLIB_KAKARETSO

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

E kenyeletsa target coverage, eo ka eona u ka qalang ho lekanya tšireletso ea khoutu ka liteko.

MYLIB_TESTING

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

E fana ka bokhoni ba ho tima moaho oa tlhahlobo ea yuniti le sepheo check. Ka lebaka leo, tekanyo ea tšireletso ea khoutu ka liteko e ea tima (bona. MYLIB_COVERAGE).

Teko e boetse e emisoa ka bo eona haeba projeke e hokahane le projeke e 'ngoe e le subproject e sebelisang taelo add_subdirectory.

MYLIB_DOXYGEN_LANGUAGE

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

E fetola puo ea litokomane tseo sepheo se li hlahisang doc ho ya fuweng. Bakeng sa lethathamo la lipuo tse fumanehang, bona Webosaete ea sistimi ea oksijene.

Serussia e nolofalitsoe ke kamehla.

Lipheo tsa kopano

ke default

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

Haeba sepheo se sa hlalosoa (se lekanang le sepheo all), e bokella sohle seo e ka se khonang, hape e bitsa sepheo check.

mylib-unit-test

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

E kopanya liteko tsa likarolo. E lumelletsoe ke kamehla.

hlahloba

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

E tsamaisa liteko tse bokelletsoeng (tse bokelletsoeng, haeba li se li se li le teng). E lumelletsoe ke kamehla.

Bona hape mylib-unit-tests.

Boitsebiso

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

E hlahloba ho sebetsa (e sebetsa, haeba e se e se e ntse e le teng) liteko tsa yuniti bakeng sa khaso ea khoutu ka liteko tse sebelisang lenaneo gcovr.

Sehlahisoa sa ho futhumatsa se tla shebahala tjena:

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

Sepheo se fumaneha feela ha khetho e nolofalitsoe MYLIB_COVERAGE.

Bona hape check.

doc

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

E qala ho hlahisa litokomane tsa khoutu ho sebelisa sistimi Oksijene.

wandbox

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

Karabo ea tšebeletso e shebahala tjena:

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

Tšebeletso e sebelisetsoa sena Wandbox. Ha ke tsebe hore na li-server tsa bona li tenyetseha hakae, empa ke nahana hore monyetla ona ha oa lokela ho sebelisoa hampe.

mehlala

Theha morero ka mokhoa oa ho lokisa liphoso ka tekanyo ea tšireletso

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

Ho kenya morero ntle le kopano ea pele le liteko

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

Haha ka mokhoa oa tokollo ka mokopanyi o fanoeng

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

Ho hlahisa litokomane ka Senyesemane

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

Lisebelisoa

  1. CMake 3.13

    Ebile, mofuta oa CMake 3.13 o hlokoa feela ho tsamaisa tse ling tsa litaelo tse hlalositsoeng ho thuso ena. Ho ea ka pono ea syntax ea CMake scripts, mofuta oa 3.8 o lekane haeba moloko o bitsoa ka litsela tse ling.

  2. Laebrari ea liteko thuto

    Teko e ka emisoa (bona опцию MYLIB_TESTING).

  3. Oksijene

    Ho fetola puo eo litokomane li tla hlahisoa ka eona, ho fanoa ka khetho MYLIB_DOXYGEN_LANGUAGE.

  4. Mofetoleli oa puo python 3

    Bakeng sa tlhahiso e iketsang li-sandbox tsa inthaneteng.

Tlhahlobo e tsitsitseng

Ka CMake le lisebelisoa tse 'maloa tse ntle, o ka fana ka tlhahlobo e tsitsitseng ka boiteko bo fokolang.

Cppcheck

CMake e na le ts'ehetso e hahelletsoeng bakeng sa sesebelisoa sa tlhahlobo se tsitsitseng Cppcheck.

Ho etsa sena o hloka ho sebelisa khetho CMAKE_CXX_CPPCHECK:

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

Kamora sena, tlhahlobo e tsitsitseng e tla hlahisoa ka bo eona nako le nako ha mohloli o hlophisoa le ho hlophisoa bocha. Ha ho hlokahale ho etsa letho le eketsehileng.

clang

Ka thuso ea sesebelisoa se makatsang scan-build U ka boela ua etsa tlhahlobo ea static ka nako:

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

Mona, ho fapana le boemo ba Cppcheck, o hloka ho tsamaisa moaho nako le nako scan-build.

Afterword

CMake ke sistimi e matla haholo ebile e tenyetseha e u lumellang ho kenya ts'ebetso bakeng sa tatso le 'mala o mong le o mong. 'Me, le hoja ka linako tse ling syntax e siea ho hongata ho sa hlokahaleng, diabolosi o ntse a se mobe joalo ka ha a pentiloe. Sebelisa mokhoa oa ho haha ​​oa CMake molemong oa sechaba le bophelo bo botle.

Khoasolla template ea morero

Source: www.habr.com

Eketsa ka tlhaloso