CMake ma C++ o uso e faavavau

CMake ma C++ o uso e faavavau

I le taimi o le atinaʻe, ou te manaʻo e sui tagata faʻapipiʻi, fausia auala, faʻalagolago i lomiga, faia suʻesuʻega faʻapitoa, fua faʻatinoga, aoina faʻasalalauga, faʻapipiʻi pepa, ma isi. Ma ou te fiafia tele i le CMake aua e mafai ai ona ou faia mea uma ou te manaʻo ai.

E toatele tagata e faitioina CMake, ma e masani lava ona tatau ai, ae afai e te tilotilo i ai, e le o mea uma e leaga tele, ma talu ai nei. e le leaga lava, ma o le itu o le atinae e fai si lelei.

I lenei faʻamatalaga, ou te manaʻo e taʻu atu ia te oe pe faʻapefea ona faʻapipiʻi se faletusi ulutala i C ++ i le CMake system e maua ai galuega nei:

  1. Fonotaga;
  2. Su'ega Autorun;
  3. Su'ega fa'atulafonoina;
  4. Fa'apipi'i;
  5. Auto-pepatusi;
  6. Fausia pusa oneone i luga ole laiga;
  7. Su'esu'ega tumau.

Soʻo se tasi ua uma ona malamalama i le lelei ma le C-make e mafai ona faigofie la'uina ata o le poloketi ma amata faʻaaogaina.


Mataupu

  1. Poloketi mai totonu
    1. Fa'atulagaina o le poloketi
    2. Faila CMake autu (./CMakeLists.txt)
      1. Fa'amatalaga o le poloketi
      2. Filifiliga Poloketi
      3. Filifiliga tu'ufa'atasi
      4. Faamoemoe autu
      5. faatulagaga
      6. Tests
      7. Tusi
      8. Pusa oneone i luga ole laiga
    3. Tusi su'ega (test/CMakeLists.txt)
      1. Suʻega
      2. Faʻapipiʻi
    4. Fa'amatalaga mo fa'amaumauga (doc/CMakeLists.txt)
    5. Fa'amatalaga mo le pusa oneone i luga ole laiga (i luga ole laiga/CMakeLists.txt)
  2. Poloketi i fafo
    1. Fono Aoao
      1. Tupulaga
      2. Fono Aoao
    2. Filifiliga
      1. MYLIB_COVERAGE
      2. MYLIB_TESTING
      3. MYLIB_DOXYGEN_LANGUAGE
    3. Manulauti a le Fono
      1. e faaletonu
      2. mylib-unit-su'ega
      3. siaki
      4. inisiua
      5. doc
      6. atigipusa
    4. faataitaiga
  3. Meafaigaluega
  4. Su'esu'ega tumau
  5. Taofi upu

Poloketi mai totonu

Fa'atulagaina o le poloketi

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

E masani ona matou talanoa e uiga i le faʻatulagaina o tusitusiga CMake, o lea o le a talanoaina auiliili. So'o se tasi e mafai ona va'ai sa'o i isi faila i luga o le itulau o galuega fa'ata'ita'i.

Faila CMake autu (./CMakeLists.txt)

Fa'amatalaga o le poloketi

Muamua, e tatau ona e talosagaina le manaʻomia o le CMake system. CMake o loʻo faʻaleleia, saini faʻatonu ma amioga i tulaga eseese ua suia. Ina ia mafai e CMake ona vave malamalama i mea tatou te mananaʻo mai ai, e tatau ona vave faʻamaumau a tatou manaʻoga mo ia.

cmake_minimum_required(VERSION 3.13)

Ona matou filifilia lea o la matou poloketi, lona igoa, faʻamatalaga, gagana faʻaaogaina, ma isi. (vaai. команду project).

I lenei tulaga matou te faailoa atu le gagana CXX (ma o lona uiga o le C++) ina ia le faʻalavelaveina e CMake ma suʻe se faʻapipiʻi gagana C (e le mafai, CMake e aofia ai gagana e lua: C ma C++).

project(Mylib VERSION 1.0 LANGUAGES CXX)

O iinei e mafai ai ona e siaki vave pe o loʻo aofia ai la matou poloketi i se isi poloketi e avea o se poloketi laiti. O le a fesoasoani tele lenei mea i le lumanaʻi.

get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)

Filifiliga Poloketi

O le a matou tuuina atu ni filifiliga se lua.

O le filifiliga muamua o le MYLIB_TESTING - e faʻamalo suʻega iunite. Atonu e manaʻomia lenei mea pe a tatou mautinoa o loʻo lelei mea uma i suʻega, ae tatou te manaʻo, mo se faʻataʻitaʻiga, e faʻapipiʻi pe faʻapipiʻi a tatou poloketi. Po'o le matou poloketi o lo'o aofia ai o se subproject - i lenei tulaga, e le fiafia le tagata fa'aaogaina la matou poloketi e fa'atino a matou su'ega. E te le su'eina le fa'alagolago e te fa'aogaina, a ea?

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

E le gata i lea, o le a matou faia se filifiliga ese MYLIB_COVERAGE mo le fuaina o tulafono fa'asalalau e ala i su'ega, ae o le a mana'omia ni mea faigaluega fa'aopoopo, o lea e mana'omia ai le fa'aagaaga manino.

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

Filifiliga tu'ufa'atasi

O le mea moni, matou te lelei faʻatasi ma tagata fai polokalame, o lea matou te mananaʻo ai i le maualuga maualuga o faʻataʻitaʻiga-taimi mai le tagata faʻapipiʻi. E leai se isumu e tasi e se'e.

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
)

O le a matou faʻamalo foʻi faʻaopoopoga ina ia mafai ona tausisia atoatoa le gagana C++. E mafai ona latou faʻaogaina i le CMake.

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

Faamoemoe autu

O la matou faletusi e na'o faila o ulutala, o lona uiga e leai ni a matou fa'aletonu i le tulaga o faletusi fa'amautu po'o le malosi. I le isi itu, ina ia mafai ona faʻaogaina le matou faletusi i fafo, e manaʻomia ona faʻapipiʻi, e manaʻomia ona iloa i totonu o le polokalama ma faʻafesoʻotaʻi i lau poloketi, ma i le taimi lava e tasi ia lava ulutala, faʻapea foʻi ma nisi faʻaopoopoga, o lo'o fa'apipi'i i ai meatotino.

Mo lenei faʻamoemoe, matou te fatuina se faletusi faʻaoga.

add_library(mylib INTERFACE)

Matou te fusifusia ulutala i la matou potutusi fa'aoga.

Fa'aonaponei, fa'aonaponei, fa'aoga talavou o CMake o lona uiga o ulutala, meatotino, ma isi. fa'asalalauina e ala i le tasi fa'amoemoe. Ua lava lea e fai atu ai target_link_libraries(target PRIVATE dependency), ma ulutala uma e feso'ota'i ma le sini dependency, o le a avanoa mo punaoa e patino i le sini target. Ma e te le manaʻomia se mea [target_]include_directories. O le a fa'aalia lea i lalo ile au'ili'iliga CMake tusitusiga mo su'ega iunite.

E taua foi le gauai atu i le mea e taʻua. выражения-генераторы: $<...>.

O lenei poloaiga e faʻafesoʻotaʻi ulutala matou te manaʻomia ma la matou faletusi faʻaoga, ma afai e fesoʻotaʻi le matou faletusi i soʻo se sini i totonu o le CMake hierarchy tutusa, ona faʻafesoʻotaʻi lea o ulutala mai le lisi. ${CMAKE_CURRENT_SOURCE_DIR}/include, ma pe afai o loʻo faʻapipiʻiina le matou faletusi i luga o le polokalama ma fesoʻotaʻi atu i se isi poloketi e faʻaaoga ai le poloaiga find_package, ona sosoo ai lea ma ulutala mai le lisi include fa'atatau ile fa'atonuga fa'apipi'i.

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

Sei o tatou setiina se tulaga o le gagana. Ioe, o le mea mulimuli lava. I le taimi lava e tasi, matou te le gata ina aofia ai le tulaga masani, ae faʻalauteleina foi ia i latou o le a faʻaaogaina la matou faletusi. E ausia lenei mea ona o le mea moni e iai le vaega o le meatotino seti INTERFACE (tagai target_compile_features poloaiga).

target_compile_features(mylib INTERFACE cxx_std_17)

Se'i fai se igoa fa'aigoa mo la tatou faletusi. E le gata i lea, mo le matagofie, o le ai ai i totonu o se "igoa igoa" faapitoa. O le a aoga lenei mea pe a faʻaalia ni modules eseese i totonu o la matou faletusi, ma matou o atu e faʻafesoʻotaʻi tutoʻatasi le tasi ma le isi. E pei o Busta, mo se faʻataʻitaʻiga.

add_library(Mylib::mylib ALIAS mylib)

faatulagaga

Fa'apipi'i a matou ulutala i totonu o le faiga. E faigofie mea uma iinei. Matou te fai atu o le faila ma ulutala uma e tatau ona alu i totonu o le lisi include fa'atatau ile nofoaga fa'apipi'i.

install(DIRECTORY include/mylib DESTINATION include)

Ma le isi, matou te logoina le faiga faʻavae matou te manaʻo e mafai ona valaʻau le poloaiga i galuega faʻavae lona tolu find_package(Mylib) ma maua se sini Mylib::mylib.

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

O le isi sipela e tatau ona malamalama i lenei auala. A i totonu o se galuega a isi vaega matou te taʻua le poloaiga find_package(Mylib 1.2.3 REQUIRED), ma o le lomiga moni o le faletusi faʻapipiʻi o le a le fetaui ma le faʻasologa 1.2.3E otometi lava ona fa'atupuina e le CMake se mea sese. O lona uiga, e te le mana'omia le siakiina ma le lima.

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

Afai e le atoatoa su'ega fa'aoga manino filifiliga talafeagai po'o le matou poloketi o se subproject, o lona uiga, e feso'ota'i atu i se isi poloketi CMake e fa'aaoga ai le fa'atonuga add_subdirectory, matou te le agai i luma i luga o le faʻatonuga, ma o le tusitusiga, o loʻo faʻamatalaina poloaiga mo le faʻatupuina ma le faʻataʻitaʻiina o suʻega, e le o taʻavale.

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

Tusi

O le a le faia fo'i fa'amaumauga i le tulaga o se poloketi laiti.

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

Pusa oneone i luga ole laiga

E fa'apea fo'i, o le a leai fo'i se pusa oneone i luga ole laiga.

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

Tusi su'ega (test/CMakeLists.txt)

Suʻega

Muamua lava, matou te maua se afifi ma le faʻatulagaga o suʻega manaʻomia (sui i lau mea e sili ona e fiafia i ai).

find_package(doctest 2.3.3 REQUIRED)

Se'i fai la tatou faila fa'atino ma su'ega. E masani lava ou te faʻaopoopo saʻo i le executable binary naʻo le faila e aofia ai le galuega main.

add_executable(mylib-unit-tests test_main.cpp)

Ma ou te faʻaopoopoina faila lea e faʻamatalaina mulimuli ane ai suʻega. Ae e te le tau faia lena mea.

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

Matou te faʻafesoʻotaʻi faʻalagolago. Faamolemole ia matau na matou faʻafesoʻotaʻi naʻo le CMake sini matou te manaʻomia i la matou binary ma e leʻi valaʻau le poloaiga target_include_directories. Ulutala mai le auivi o le suʻega ma mai matou Mylib::mylib, faʻapea foʻi ma le fausiaina o tapulaʻa (i lo matou tulaga, o le C++ gagana tulaga) na oʻo mai ma nei sini.

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

Ma le mea mulimuli, matou te fatuina se taulaiga faʻailoga, o le "fausia" lea e tutusa ma suʻega faʻataʻitaʻi, ma faʻaopoopo lenei faʻamoemoe i le faʻaogaina o le fale (o le uiga e nafa ma lenei mea. ALL). O lona uiga o le faaletonu o le fausiaina e faʻaosoina ai suʻega e taʻavale, o lona uiga o le a le galo ia i tatou e faʻatautaia.

add_custom_target(check ALL COMMAND mylib-unit-tests)

Faʻapipiʻi

O le isi, matou te fa'atagaina le fuaina o le fa'ailoga pe a fa'ailoa mai le filifiliga talafeagai. O le a ou le alu i auiliiliga, aua latou te fesoʻotaʻi atili i se meafaigaluega mo le fuaina o le inisiua nai lo le CMake. E na'o le taua o le maitauina e fa'atatau i taunu'uga o le a faia ai se sini coverage, lea e faigofie ai ona amata fuaina le ufiufi.

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

Fa'amatalaga mo fa'amaumauga (doc/CMakeLists.txt)

Maua le Doxygen.

find_package(Doxygen)

Le isi, matou siaki pe ua setiina e le tagata faʻaoga le fesuiaiga o le gagana. Afai ioe, ona matou le paʻi atu lea, a leai, ona matou ave lea o le Rusia. Ona matou faʻatulagaina lea o faila faila o le Doxygen. O fesuiaiga uma e manaʻomia, e aofia ai le gagana, alu i ai i le taimi o le faʻatulagaga (vaʻai. команду configure_file).

Ona tatou faia lea o se sini doc, lea o le a amata fausia ai faʻamaumauga. Talu ai o le fa'atupuina o fa'amaumauga e le'o le mana'oga tele lea i le fa'agasologa o le atina'e, o le fa'amoemoe o le a le mafai ona fa'aletonu; e tatau ona fa'alauiloa manino.

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

Fa'amatalaga mo le pusa oneone i luga ole laiga (i luga ole laiga/CMakeLists.txt)

O iinei tatou te maua ai le Python lona tolu ma fatuina se sini wandbox, lea e maua ai se talosaga e fetaui ma le API auaunaga Pusa ta'avale, ma auina atu o ia e alu. O le tali e sau ma se feso'ota'iga i le pusa oneone ua mae'a.

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

Poloketi i fafo

Se'i o tatou va'ai pe fa'apefea ona fa'aogaina nei mea uma.

Fono Aoao

Fausiaina o lenei poloketi, pei o soʻo se isi lava poloketi ile CMake build system, e lua vaega:

Tupulaga

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

Afai e le aoga le poloaiga o loʻo i luga ona o se kopi tuai o CMake, taumafai e aveese -S:

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

E uiga i filifiliga.

Fausia le poloketi

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

E uiga i sini fa'apotopotoga.

Filifiliga

MYLIB_COVERAGE

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

E aofia ai le taula'iga coverage, lea e mafai ai ona e amata fuaina le fa'ailoga tulafono e ala i su'ega.

MYLIB_TESTING

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

E maua ai le malosi e fa'agata ai le fau ma le fa'atatau o su'ega iunite check. O le i'uga, ua tape le fuaina o fa'ailoga fa'atulafono e ala i su'ega (va'ai. MYLIB_COVERAGE).

O le su'ega e otometi fo'i le fa'aletonu pe a feso'ota'i le poloketi i se isi poloketi o se subproject e fa'aaoga ai le fa'atonuga add_subdirectory.

MYLIB_DOXYGEN_LANGUAGE

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

Suia le gagana o le pepa o lo'o fa'atupuina doc i le ua tuuina atu. Mo se lisi o gagana avanoa, tagai Doxygen system website.

Ua mafai le Rusia ona o le faaletonu.

Manulauti a le Fono

e faaletonu

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

Afai e le o faʻamaonia le sini (lea e tutusa ma le faʻamoemoe all), aoina mea uma na te mafaia, ma taʻua foi le taulaʻiga check.

mylib-unit-su'ega

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

Fa'aopoopo su'ega iunite. Fa'aaga e ala i le fa'aletonu.

siaki

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

Fa'atino su'ega iunite ua aoina (aoina, pe a le'i uma). Fa'aaga e ala i le fa'aletonu.

Tagai foi mylib-unit-tests.

inisiua

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

Iloiloga tamo'e (taufetuli, pe afai e le'i uma) su'ega iunite mo fa'amatalaga fa'ailoga e ala i su'ega e fa'aoga ai le polokalame gcovr.

O le faʻafefe o le faʻapipiʻiina o le a foliga pei o lenei:

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

E na'o avanoa le fa'amoemoe pe a mafai le filifiliga MYLIB_COVERAGE.

Tagai foi check.

doc

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

Amata le fa'atupuina o fa'amaumauga code e fa'aoga ai le faiga okesene.

atigipusa

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

O le tali mai le tautua e pei o lenei:

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

O loʻo faʻaaogaina le tautua mo lenei mea Pusa ta'avale. Ou te le iloa pe faʻafefea ona fetuutuunai a latou 'auʻaunaga, ae ou te manatu e le tatau ona faʻaleagaina lenei avanoa.

faataitaiga

Fausia le poloketi i le faʻaogaina o le debug faʻatasi ma le fua faʻatatau

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

Fa'apipi'i se poloketi e aunoa ma se fa'apotopotoga muamua ma su'ega

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

Fausia i le faiga faʻasaʻo ma se tuʻufaʻatasiga tuʻuina atu

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

Fausiaina o fa'amaumauga ile Igilisi

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

Meafaigaluega

  1. CMake 3.13

    O le mea moni, o le CMake version 3.13 e manaʻomia e faʻatautaia ai nisi o faʻatonuga faʻamafanafana o loʻo faʻamatalaina i lenei fesoasoani. Mai le vaaiga o le syntax o CMake scripts, faʻasologa 3.8 e lava pe afai e valaʻau augatupulaga i isi auala.

  2. Su'ega faletusi doctest

    E mafai ona fa'aletonu su'ega (va'ai опцию MYLIB_TESTING).

  3. okesene

    Ina ia fesuia'i le gagana o le a fa'atupuina ai fa'amaumauga, ua tu'uina atu se filifiliga MYLIB_DOXYGEN_LANGUAGE.

  4. Fa'aliliu gagana Python 3

    Mo le gaosiga otometi pusa oneone i luga ole laiga.

Su'esu'ega tumau

Faatasi ai ma CMake ma ni meafaigaluega lelei se lua, e mafai ona e tuʻuina atu suʻesuʻega faʻapitoa ma se taumafaiga itiiti.

Cppcheck

CMake ua fausia-i totonu o le lagolago mo se meafaigaluega auiliiliga static Cppcheck.

Ina ia faia lenei mea e te manaʻomia le faʻaogaina o le filifiliga CMAKE_CXX_CPPCHECK:

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

A maeʻa lenei mea, o le a otometi lava le faʻalauiloaina o suʻesuʻega faʻapitoa i taimi uma e tuʻufaʻatasia ai ma toe tuʻufaʻatasia le puna. E leai se mea e manaʻomia e fai ai se mea faʻaopoopo.

Faʻapipiʻi

Faatasi ai ma le fesoasoani a se meafaigaluega matagofie scan-build E mafai fo'i ona e fa'atinoina su'esu'ega fa'amau i se taimi:

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

Lenei, e le pei o le mataupu i le Cppcheck, e tatau ona e faʻatautaia le fausiaina i taimi uma scan-build.

Taofi upu

CMake o se faiga sili ona mamana ma fetuutuunai e mafai ai ona e faʻatinoina galuega mo tofo uma ma lanu. Ma, e ui lava o le syntax o nisi taimi e tuua ai le tele o mea e manaʻomia, o le tiapolo e le o se mea leaga e pei ona valiina. Fa'aaoga le CMake build system mo le manuia o sosaiete ma le soifua maloloina.

La'u mai le mamanu o le poloketi

puna: www.habr.com

Faaopoopo i ai se faamatalaga