He tuakana a CMake me C++ mo ake tonu atu

He tuakana a CMake me C++ mo ake tonu atu

I te wa o te whakawhanaketanga, he pai ki ahau te whakarereke i nga kaitoi, te hanga tikanga, nga putanga whakawhirinaki, te mahi tātari pateko, te ine mahi, te kohi kapi, te whakaputa tuhinga, aha atu. A ka tino aroha ahau ki a CMake na te mea ka taea e au te mahi i nga mea katoa e hiahia ana ahau.

He maha nga tangata e whakahee ana i a CMake, he maha nga wa e tika ana, engari mena ka tirohia e koe, ehara nga mea katoa i te kino rawa atu, a tata nei. karekau he kino, a he tino pai te ahunga o te whanaketanga.

I roto i tenei tuhipoka, e hiahia ana ahau ki te korero ki a koe me pehea te whakarite noa i te whare pukapuka pane i roto i te C++ i roto i te punaha CMake ki te tiki i nga mahi e whai ake nei:

  1. Huihuinga;
  2. Nga whakamatautau autorun;
  3. Te inenga o te kapi waehere;
  4. Tāutatanga;
  5. Tuhituhi-aunoa;
  6. Te hanga pouaka kirikiri ipurangi;
  7. Te tātari pateko.

Ko te tangata e mohio ana ki nga painga me te C-make ka taea noa tikiake tauira kaupapa ka timata ki te whakamahi.


Tuhinga

  1. Kaupapa mai i roto
    1. Te hanganga kaupapa
    2. Kōnae CMake matua (./CMakeLists.txt)
      1. Nga korero kaupapa
      2. Kōwhiringa Kaupapa
      3. Kōwhiringa whakahiato
      4. Te kaupapa matua
      5. tāutanga
      6. Nga whakamatautau
      7. Tuhinga
      8. Pouaka kirikiri ipurangi
    3. Tuhituhi whakamatautau (whakamatautau/CMakeLists.txt)
      1. Te whakamātautau
      2. Kapinga
    4. Hōtuhi mō te tuhinga (doc/CMakeLists.txt)
    5. Hōtuhi mō te pouaka kirikiri ipurangi (ipurangi/CMakeLists.txt)
  2. Kaupapa ki waho
    1. Tuhinga
      1. Nga whakatupuranga
      2. Tuhinga
    2. Kōwhiringa
      1. MYLIB_COVERAGE
      2. MYLIB_TESTING
      3. MYLIB_DOXYGEN_LANGUAGE
    3. Ko nga whaainga o te huihuinga
      1. i te taunoa
      2. mylib-unit-whakamatautau
      3. tirohia
      4. kapinga
      5. doc
      6. pouaka toa
    4. tauira
  3. Utauta
  4. Te tātari pateko
  5. Afterword

Kaupapa mai i roto

Te hanganga kaupapa

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

Ko te nuinga ka korerohia me pehea te whakariterite i nga tuhinga CMake, na reira ka korerohia nga korero. Ka taea e te tangata te tiro tika ki te toenga o nga konae i te wharangi kaupapa tauira.

Kōnae CMake matua (./CMakeLists.txt)

Nga korero kaupapa

Tuatahi, me tono koe i te putanga e hiahiatia ana o te punaha CMake. Kei te tipu haere a CMake, kei te huri nga hainatanga whakahau me nga whanonga i roto i nga ahuatanga rereke. Kia mohio ai a CMake ki ta tatou e hiahia ana mai i a ia, me tuhi tonu i a tatou whakaritenga mo taua mea.

cmake_minimum_required(VERSION 3.13)

Na ka tohua to maatau kaupapa, tona ingoa, putanga, reo whakamahia, aha atu (tirohia. команду project).

I tenei keehi ka tohuhia te reo CXX (a ko te tikanga tenei ko C++) kia kore ai a CMake e whakararu me te rapu mo te kaitoi reo C (ma te taunoa, kei roto i a CMake nga reo e rua: C me C++).

project(Mylib VERSION 1.0 LANGUAGES CXX)

I konei ka taea e koe te tirotiro tonu mena kua whakauruhia to maatau kaupapa ki tetahi atu kaupapa hei kaupapa iti. Ka awhina nui tenei i nga wa kei te heke mai.

get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)

Kōwhiringa Kaupapa

Ka whakaratohia e matou nga whiringa rua.

Ko te kōwhiringa tuatahi MYLIB_TESTING — ki te whakakore i nga whakamatautau wae. Ka tika pea tenei mena ka mohio tatou kei te pai nga mea katoa me nga whakamatautau, engari ko te hiahia anake, hei tauira, ki te whakauru, ki te whakaemi ranei i ta maatau kaupapa. Ko ta maatau kaupapa ranei kua whakauruhia hei kaupapa iti - i tenei keehi, kaore te kaiwhakamahi o ta maatau kaupapa e aro ki te whakahaere i o maatau whakamatautau. Kaore koe e whakamatautau i nga whakawhirinaki e whakamahia ana e koe?

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

I tua atu, ka mahia e matou he waahanga motuhake MYLIB_COVERAGE mo te ine i te kapinga waehere ma nga whakamatautau, engari me whai taputapu taapiri, no reira me tino whakahoehia.

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

Kōwhiringa whakahiato

Ae ra, he hauhautanga matou me nga kaihōtaka, no reira kei te pirangi matou ki te taumata teitei o nga tātaritanga-wa-whakahiato mai i te kaitoi. E kore tetahi kiore e paheke.

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
)

Ka whakakorehia ano e matou nga toronga kia tino tutuki ki te paerewa reo C++. Ka taea te taunoa i CMake.

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

Te kaupapa matua

Kei roto noa i ta maatau whare pukapuka nga konae pane, ko te tikanga karekau he ruha i te ahua o nga whare pukapuka pateko, hihiri ranei. I tetahi atu taha, mo te whakamahi i to maatau whare pukapuka ki waho, me whakauru, me kitea i roto i te punaha me te hono atu ki to kaupapa, i te wa ano ko enei pane, me etahi atu taapiri, e piri ana ki ona taonga.

Mo tenei kaupapa, ka hangaia e matou he whare pukapuka atanga.

add_library(mylib INTERFACE)

Ka herea e matou nga pane ki to matou puna atanga.

Ko te whakamahinga hou, huatau, taiohi o CMake e kii ana ko nga pane, taonga, aha atu. ka tukuna ma te kaupapa kotahi. Heoi ano te korero target_link_libraries(target PRIVATE dependency), me nga pane katoa e hono ana ki te whaainga dependency, ka watea mai mo nga puna korero no te whaainga target. A kaore koe e hiahia [target_]include_directories. Ka whakaatuhia tenei i raro i te tātaritanga CMake tuhinga mo nga whakamatautau wae.

He pai ano hoki te aro ki nga mea e kiia ana. выражения-генераторы: $<...>.

Ka hono tenei whakahau i nga pane e hiahiatia ana e matou ki to maatau whare pukapuka atanga, a ki te hono to maatau whare pukapuka ki tetahi whaainga i roto i te hierarchy CMake kotahi, ka hono nga pane mai i te whaiaronga ki tera. ${CMAKE_CURRENT_SOURCE_DIR}/include, a ki te whakauruhia to maatau whare pukapuka ki runga i te punaha ka hono atu ki tetahi atu kaupapa ma te whakamahi i te whakahau find_package, ka hono nga pane mai i te whaiaronga ki taua mea include e pa ana ki te whaiaronga whakaurunga.

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

Me whakatakoto he paerewa reo. Ko te tikanga, ko te mea whakamutunga. I te wa ano, ehara i te mea ka whakauru noa i te paerewa, engari ka toro atu ki te hunga ka whakamahi i to maatau whare pukapuka. Ka tutuki tenei na te mea he waahanga te taonga kua whakaritea INTERFACE (tirohia para. target_compile_features whakahau).

target_compile_features(mylib INTERFACE cxx_std_17)

Me hanga he ingoa ingoa mo to tatou whare pukapuka. Ano, mo te ataahua, ka waiho i roto i te "mokowā ingoa" motuhake. Ka whai hua tenei ina puta mai nga momo waahanga rereke i roto i to maatau whare pukapuka, a ka haere tatou ki te hono takitahi tetahi ki tetahi. Ka rite ki a Busta, hei tauira.

add_library(Mylib::mylib ALIAS mylib)

tāutanga

Te whakauru i o maatau pane ki roto i te punaha. He ngawari nga mea katoa i konei. E kii ana matou me uru te kōpaki me nga pane katoa ki roto i te raarangi include e pa ana ki te waahi whakaurunga.

install(DIRECTORY include/mylib DESTINATION include)

I muri mai, ka whakamohiohia e matou te punaha hanga e hiahia ana matou ki te karanga i te whakahau i roto i nga kaupapa tuatoru find_package(Mylib) ka whiwhi whainga Mylib::mylib.

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

Ko te tikanga o muri mai me maarama penei. A, no te i roto i te kaupapa tuatoru-rōpū karanga matou te whakahau find_package(Mylib 1.2.3 REQUIRED), a ko te tino putanga o te whare pukapuka kua whakauruhia ka kore e hototahi ki te putanga 1.2.3Ka whakaputa aunoa a CMake i te hapa. Arā, karekau koe e whai ki te whai a ringa i nga putanga.

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)

Nga whakamatautau

Mena kua monoa nga whakamatautau ma te whakamahi kōwhiringa hāngai ko to maatau kaupapa he kaupapa iti, ara, he hono ki tetahi atu kaupapa CMake ma te whakamahi i te whakahau add_subdirectory, kaore matou e neke atu i runga i te hierarchy, me te tuhinga, e whakaatu ana i nga whakahau mo te whakaputa me te whakahaere i nga whakamatautau, kaore i te rere.

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

Tuhinga

Kare hoki nga tuhinga e hangaia mo te kaupapa iti.

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

Pouaka kirikiri ipurangi

Waihoki, karekau he pouaka kirikiri a te kaupapa iti.

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

Tuhituhi whakamatautau (whakamatautau/CMakeLists.txt)

Te whakamātautau

Tuatahi, ka kitea e matou he kete me te anga whakamatautau e hiahiatia ana (whakakapi ki to tino pai).

find_package(doctest 2.3.3 REQUIRED)

Me hanga to tatou konae kawe me nga whakamatautau. I te nuinga o te wa ka taapiri tika ahau ki te rua ka taea te whakahaere ko te konae kei roto te mahi main.

add_executable(mylib-unit-tests test_main.cpp)

Na ka taapirihia e au nga konae kei te whakaahuahia nga whakamatautau i muri mai. Engari kaore koe e mahi i tera.

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

Ka hono tatou i nga whakawhirinaki. Kia mahara mai i honoa e matou nga whaainga CMake anake e hiahiatia ana e matou ki to maatau rua, kaore i karangahia te whakahau target_include_directories. Nga upoko mai i te anga whakamatautau me ta maatau Mylib::mylib, me te hanga tawhā (i roto i a maatau, ko te paerewa reo C++ tenei) i tae mai me enei whainga.

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

Ka mutu, ka hangahia e matou he piro hangarua, ko te "hanga" he rite ki te whakahaere i nga whakamatautau, ka taapirihia tenei whaainga ki te hanga taunoa (ko te huanga te kawenga mo tenei ALL). Ko te tikanga ko te hanga taunoa ka tiimata nga whakamatautau kia rere, ko te tikanga kare rawa tatou e wareware ki te whakahaere.

add_custom_target(check ALL COMMAND mylib-unit-tests)

Kapinga

I muri mai, ka taea e matou te ine ine kapitanga waehere mena ka tohua te whiringa tika. E kore ahau e haere ki nga korero, na te mea e pa ana ki tetahi taputapu mo te ine i te kapinga atu i te CMake. He mea nui anake kia mohiohia i runga i nga hua ka hangaia he whainga coverage, he pai ki te timata ki te ine i te kapi.

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

Hōtuhi mō te tuhinga (doc/CMakeLists.txt)

I kitea te Doxygen.

find_package(Doxygen)

Whai muri, ka tirohia mena kua tautuhia e te kaiwhakamahi te taurangi reo. Mena ae, kaore matou e pa ki a ia, ki te kore, ka tango matou i te Russian. Na ka whirihorahia e matou nga konae punaha Doxygen. Ko nga taurangi katoa e tika ana, tae atu ki te reo, haere ki reira i te wa o te whirihoranga (tirohia. команду configure_file).

Na ka hanga e matou he whainga doc, ka timata te whakaputa tuhinga. I te mea ehara i te mea ko te whakaputa tuhinga te hiahia nui rawa atu i roto i te tukanga whanaketanga, karekau e taea te whainga ma te taunoa; me tino whakarewahia.

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

Hōtuhi mō te pouaka kirikiri ipurangi (ipurangi/CMakeLists.txt)

I konei ka kitea te tuatoru o te Python me te hanga i tetahi whaainga wandbox, ka puta he tono e rite ana ki te API ratonga Pouaka toka, a tonoa atu ana ia. Ka tae mai te whakautu me te hono ki te pouaka kirikiri kua oti.

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

Kaupapa ki waho

Inaianei kia tirohia me pehea te whakamahi i enei mea katoa.

Tuhinga

Ko te hanga i tenei kaupapa, pera i etahi atu kaupapa i runga i te punaha hanga CMake, e rua nga waahanga:

Nga whakatupuranga

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

Mena karekau te whakahau i runga ake i mahi na te putanga tawhito o CMake, ngana ki te waiho -S:

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

Ētahi atu kōrero mō ngā kōwhiringa.

Te hanga i te kaupapa

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

He korero ano mo nga whaainga huihuinga.

Kōwhiringa

MYLIB_COVERAGE

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

Kei roto ko te whaainga coverage, ka taea e koe te timata ki te ine i te kapi waehere ma nga whakamatautau.

MYLIB_TESTING

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

Ka whakarato i te kaha ki te whakakore i te hanga whakamatautau me te whaainga check. Ko te mutunga, ka wetohia te inenga o te kapi waehere ma nga whakamatautau (tirohia. MYLIB_COVERAGE).

Ka monokia aunoatia te whakamatautau mena ka hono te kaupapa ki tetahi atu kaupapa hei kaupapa iti ma te whakamahi i te whakahau add_subdirectory.

MYLIB_DOXYGEN_LANGUAGE

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

Ka huri i te reo o nga tuhinga ka mahia e te whaainga doc ki te mea kua hoatu. Mo te rarangi o nga reo e waatea ana, tirohia pae tukutuku Doxygen System.

Kua whakahohea te Rūhia ma te taunoa.

Ko nga whaainga o te huihuinga

i te taunoa

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

Mena karekau i tohua te whaainga (he rite ki te whaainga all), ka kohikohi i nga mea katoa ka taea e ia, me te karanga ano i te whaainga check.

mylib-unit-whakamatautau

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

Ka whakahiato i nga whakamatautau wae. Whakahohea taunoa.

tirohia

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

Ka whakahaere i nga whakamatautau wae kua kohia (kua kohia, mena kaore ano). Whakahohea taunoa.

Titiro hoki mylib-unit-tests.

kapinga

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

Ka tātari i te whakahaere (ka oma, mena kaore ano) nga whakamatautau wae mo te kapi waehere ma nga whakamatautau ma te whakamahi i te papatono gcovr.

Ka penei te ahua o te putunga paninga:

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

Kei te waatea noa te whaainga ina whakahohea te whiringa MYLIB_COVERAGE.

Titiro hoki check.

doc

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

Ka tiimata te whakaputa tuhinga waehere ma te whakamahi i te punaha Doxygen.

pouaka toa

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

Ko te whakautu mai i te ratonga he penei te ahua:

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

Ka whakamahia te ratonga mo tenei Pouaka toka. Kaore au e mohio he pehea te ngawari o o raatau kaitoro, engari ki taku whakaaro kia kaua e tukinotia tenei waahi.

tauira

Hangaia te kaupapa i roto i te aratau patuiro me te inenga kapi

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

Te whakauru i tetahi kaupapa kaore he huihuinga tuatahi me te whakamatautau

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

Hangaia i roto i te aratau tuku me te kaitoi kua hoatu

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

Te whakaputa tuhinga i te reo Ingarihi

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

Utauta

  1. CMake 3.13

    Ko te tikanga, ko te putanga CMake 3.13 anake e hiahiatia ana hei whakahaere i etahi o nga whakahau papatohu e whakaahuatia ana i roto i tenei awhina. Mai i te tirohanga o te wetereo o nga tuhinga CMake, he ranea te putanga 3.8 mena ka karangahia te reanga ki etahi atu huarahi.

  2. Wharepukapuka whakamatautau whakamaarama

    Ka taea te whakakore i nga whakamatautau (tirohia опцию MYLIB_TESTING).

  3. Doxygen

    Hei huri i te reo ka whakaputahia nga tuhinga, ka tukuna he whiringa MYLIB_DOXYGEN_LANGUAGE.

  4. Kaiwhakamaori reo Python 3

    Mo te whakatipuranga aunoa pouaka kirikiri ipurangi.

Te tātari pateko

Ma te CMake me nga taputapu pai e rua, ka taea e koe te whakarato i te tātaritanga pateko me te iti o te kaha.

Cppcheck

Kua tautokohia e CMake tetahi taputapu tātari pateko Cppcheck.

Ki te mahi i tenei me whakamahi koe i te whiringa CMAKE_CXX_CPPCHECK:

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

Whai muri i tenei, ka whakarewahia aunoatia te wetewete i nga wa katoa ka whakahiatohia, ka whakahiatotia ano te puna. Kaore he take ki te mahi i tetahi mea taapiri.

Ngatata

Ma te awhina o tetahi taputapu whakamiharo scan-build Ka taea hoki e koe te whakahaere tātaritanga pateko i roto i te wa poto:

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

I konei, kaore i rite ki te keehi me Cppcheck, me whakahaere e koe te hanga i nga wa katoa scan-build.

Afterword

Ko te CMake he punaha tino kaha me te ngawari e taea ai e koe te whakatinana i nga mahi mo ia reka me nga tae. Na, ahakoa he maha nga wa ka waiho e te syntax nga mea e hiahiatia ana, kaore ano te rewera i te tino whakamataku pera i tana peita. Whakamahia te punaha hanga CMake mo te painga o te hapori me te hauora.

Tikiake tauira kaupapa

Source: will.com

Tāpiri i te kōrero