CMake na C++ bụ ụmụnne ruo mgbe ebighị ebi

CMake na C++ bụ ụmụnne ruo mgbe ebighị ebi

N'oge mmepe, ọ na-amasị m ịgbanwe ndị na-achịkọta ihe, wuo ụdịdị, ụdị ndabere, mee nyocha static, tụọ arụmọrụ, nakọta mkpuchi, mepụta akwụkwọ, wdg. Ahụrụ m CMake n'anya n'ihi na ọ na-enye m ohere ịme ihe niile m chọrọ.

Ọtụtụ ndị mmadụ na-akatọ CMake, na-abụkarị ndị kwesịrị ekwesị, ma ọ bụrụ na ị na-ele ya anya, ọ bụghị ihe niile dị njọ, na nso nso a. adịghị njọ ma ọlị, na ntụziaka nke mmepe bụ nnọọ mma.

N'ime ndetu a, achọrọ m ịgwa gị ka ị ga-esi hazie ọbá akwụkwọ nkụnye eji isi mee na C++ na sistemụ CMake iji nweta ọrụ ndị a:

  1. Mgbakọ;
  2. Nnwale Autorun;
  3. Ntụle mkpuchi koodu;
  4. Nwụnye;
  5. Akwụkwọ akpaaka;
  6. Ọgbọ igbe sandbox dị n'ịntanetị;
  7. Nyocha static.

Onye ọ bụla nke ghọtararịrị uru na C-mere nwere ike dị mfe download template oru ngo malite iji ya.


Ihe

  1. Project si n'ime
    1. Usoro oru ngo
    2. Isi faịlụ CMake (./CmakeLists.txt)
      1. Ozi oru ngo
      2. Nhọrọ oru ngo
      3. Nhọrọ nchịkọta
      4. Nzube bu isi
      5. ọnọdụ
      6. Ule
      7. Документация
      8. Igbe sandbox dị n'ịntanetị
    3. Edemede ule (ule/CmakeLists.txt)
      1. Ule
      2. Mkpuchi
    4. Edemede maka akwụkwọ (doc/CmakeLists.txt)
    5. Ederede maka igbe sandbox dị n'ịntanetị (online/CmakeLists.txt)
  2. Project n'èzí
    1. Mgbakọ
      1. Ọgbọ
      2. Mgbakọ
    2. Nhọrọ
      1. MYLIB_COVERAGE
      2. MYLIB_TESTING
      3. MYLIB_DOXYGEN_LANGUAGE
    3. Mgbakọ lekwasịrị anya
      1. ndabara
      2. mylib-unit-ule
      3. ego
      4. mkpuchi
      5. DOC
      6. wandbox
    4. atụ
  3. Ngwaọrụ
  4. Nyocha static
  5. Afterword

Project si n'ime

Usoro oru ngo

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

Anyị ga-ekwukarị banyere otu esi ahazi scripts CMake, yabụ a ga-atụle ha n'ụzọ zuru ezu. Onye ọ bụla nwere ike ịlele faịlụ ndị ọzọ ozugbo na ibe oru ngo template.

Isi faịlụ CMake (./CmakeLists.txt)

Ozi oru ngo

Nke mbụ, ịkwesịrị ịrịọ ụdị sistemụ CMake achọrọ. CMake na-agbanwe, mbinye aka iwu na omume na ọnọdụ dị iche iche na-agbanwe. Ka CMake ghọta ozugbo ihe anyị chọrọ na ya, anyị kwesịrị idekọ ihe anyị chọrọ ozugbo maka ya.

cmake_minimum_required(VERSION 3.13)

Mgbe ahụ, anyị ga-akọwapụta ọrụ anyị, aha ya, ụdị ya, asụsụ ndị a na-eji, wdg. (lee. команду project).

N'okwu a, anyị na-egosi asụsụ CXX (nke a pụtara C++) ka CMake ghara ịkpa ike wee chọọ mkpokọta asụsụ C (na ndabara, CMake gụnyere asụsụ abụọ: C na C ++).

project(Mylib VERSION 1.0 LANGUAGES CXX)

N'ebe a, ị nwere ike ịlele ozugbo ma ọrụ anyị etinyere n'ọrụ ọzọ dị ka isiokwu. Nke a ga-enyere aka nke ukwuu n'ọdịnihu.

get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)

Nhọrọ oru ngo

Anyị ga-enye nhọrọ abụọ.

Nhọrọ nke mbụ bụ MYLIB_TESTING - iji gbanyụọ ule otu. Nke a nwere ike ịdị mkpa ma ọ bụrụ na anyị ji n'aka na ihe niile dị n'usoro na ule, ma anyị chọrọ naanị, dịka ọmụmaatụ, ịwụnye ma ọ bụ ngwugwu ọrụ anyị. Ma ọ bụ ọrụ anyị gụnyere dị ka isiokwu - na nke a, onye ọrụ nke ọrụ anyị enweghị mmasị na-agba ọsọ anyị ule. Ị naghị anwale dabere na ị na-eji, ị?

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

Na mgbakwunye, anyị ga-eme nhọrọ dị iche MYLIB_COVERAGE maka ịlele mkpuchi koodu site na ule, mana ọ ga-achọ ngwaọrụ ndị ọzọ, ya mere ọ ga-adị mkpa ka ọ rụọ ọrụ nke ọma.

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

Nhọrọ nchịkọta

N'ezie, anyị dị mma gbakwunyere ndị mmemme, yabụ anyị chọrọ ọkwa kachasị nke nyocha oge mkpokọta site na nchịkọta. O nweghị otu òké ga-agafe.

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
)

Anyị ga-ewepụkwa ndọtị ka anyị wee na-erube isi n'ụkpụrụ asụsụ C++. Enyere ha na ndabara na CMake.

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

Nzube bu isi

Ọbá akwụkwọ anyị nwere naanị faịlụ nkụnye eji isi mee, nke pụtara na anyị enweghị mkpochapụ ọ bụla n'ụdị ọba akwụkwọ kwụ ọtọ ma ọ bụ dị ike. N'aka nke ọzọ, iji jiri ọbá akwụkwọ anyị n'èzí, ọ dị mkpa ka etinye ya, ọ dị mkpa ka a chọpụta ya na usoro ma jikọọ na ọrụ gị, na n'otu oge ahụ, otu nkụnye eji isi mee, yana ikekwe ụfọdụ ndị ọzọ, na-agbakwunyere ya Njirimara.

Maka nke a, anyị na-emepụta ọbá akwụkwọ interface.

add_library(mylib INTERFACE)

Anyị na-ekekọta nkụnye eji isi mee n'ọbá akwụkwọ interface anyị.

Oge a, ejiji, ojiji ntorobịa nke CMake na-egosi na nkụnye eji isi mee, akụrụngwa, wdg. bufere site na otu ebumnuche. Ya mere, ezuola ikwu target_link_libraries(target PRIVATE dependency), na nkụnye eji isi mee ihe niile metụtara ebumnuche dependency, ga-adị maka isi mmalite nke ebumnuche target. Ma ị chọghị nke ọ bụla [target_]include_directories. A ga-egosipụta nke a n'okpuru na nyocha CMee script maka ule otu.

Ọ dịkwa mma ịṅa ntị na ihe a na-akpọ. выражения-генераторы: $<...>.

Iwu a na-ejikọta ndị nkụnye eji isi mee anyị chọrọ na ọbá akwụkwọ interface anyị, ma ọ bụrụ na ọbá akwụkwọ anyị jikọtara ya na ebumnuche ọ bụla n'ime otu CMake hierarchy, mgbe ahụ, ndị nkụnye eji isi mee si na ndekọ ga-ejikọta ya na ya. ${CMAKE_CURRENT_SOURCE_DIR}/include, ma ọ bụrụ na etinyere ọbá akwụkwọ anyị na sistemụ wee jikọọ na ọrụ ọzọ site na iji iwu ahụ find_package, mgbe ahụ, ndị nkụnye eji isi mee si na ndekọ ga-ejikọta ya include ikwu na nwụnye ndekọ.

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

Ka anyị tọọ ọkọlọtọ asụsụ. N'ezie, nke ikpeazụ. N'otu oge ahụ, ọ bụghị nanị na anyị na-agụnye ọkọlọtọ, kamakwa na-agbatị ya nye ndị ga-eji ọbá akwụkwọ anyị. A na-enweta nke a n'ihi na ihe onwunwe setịpụrụ nwere ụdị INTERFACE (cm. target_compile_features iwu).

target_compile_features(mylib INTERFACE cxx_std_17)

Ka anyị mepụta utu aha maka ọba akwụkwọ anyị. Ọzọkwa, maka ịma mma, ọ ga-abụ na "aha aha" pụrụ iche. Nke a ga-aba uru mgbe modul dị iche iche pụtara n'ọbá akwụkwọ anyị, anyị na-agakwa jikọọ ha n'adabereghị onwe ha. Dị ka na Busta, ọmụmaatụ.

add_library(Mylib::mylib ALIAS mylib)

ọnọdụ

Ịwụnye nkụnye eji isi mee anyị na sistemụ. Ihe niile dị mfe ebe a. Anyị na-ekwu na nchekwa nwere nkụnye eji isi mee niile kwesịrị ịbanye na ndekọ include ikwu na nwụnye ebe.

install(DIRECTORY include/mylib DESTINATION include)

Ọzọ, anyị na-agwa usoro ihe owuwu na anyị chọrọ ka anyị nwee ike ịkpọ iwu na ọrụ ndị ọzọ find_package(Mylib) ma nweta ihe mgbaru ọsọ Mylib::mylib.

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

Ekwesịrị ịghọta n'asụsụ nke na-esote otu a. Mgbe n'ime ọrụ ndị ọzọ anyị na-akpọ iwu ahụ find_package(Mylib 1.2.3 REQUIRED), na ezigbo ụdị nke ọbá akwụkwọ arụnyere agaghị ekwekọ na ụdị ahụ 1.2.3CMake ga-ewepụta njehie na-akpaghị aka. Ya bụ, ịgaghị achọ iji aka gị soro ụdị dị iche iche.

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)

Ule

Ọ bụrụ na agbanyụrụ ule n'ụzọ doro anya iji kwekọrọ nhọrọ ma ọ bụ ọrụ anyị bụ subproject, ya bụ, ejikọtara ya na ọrụ CMake ọzọ site na iji iwu ahụ add_subdirectory, anyị adịghị aga n'ihu tinyere ndị isi, na script, nke na-akọwa iwu maka na-amụba na-agba ọsọ ule, nnọọ adịghị ọsọ.

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

Документация

Agakwaghị ewepụta akwụkwọ n'ihe gbasara oru ngo.

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

Igbe sandbox dị n'ịntanetị

N'otu aka ahụ, ngalaba ahụ agaghị enwe igbe ájá dị n'ịntanetị.

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

Edemede ule (ule/CmakeLists.txt)

Ule

Nke mbụ, anyị na-ahụ ngwugwu nwere usoro nyocha achọrọ (dochie ya na ọkacha mmasị gị).

find_package(doctest 2.3.3 REQUIRED)

Ka anyị jiri ule mepụta faịlụ anyị nwere ike ime ya. Ọtụtụ mgbe, m na-agbakwunye ozugbo na ọnụọgụ abụọ enwere ike ime naanị faịlụ nke ga-enwe ọrụ ahụ main.

add_executable(mylib-unit-tests test_main.cpp)

M tinye faịlụ nke a na-akọwa ule n'onwe ha ma emechaa. Ma ị gaghị eme nke ahụ.

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

Anyị jikọtara dabere. Biko mara na anyị jikọtara naanị ebumnuche CMake anyị chọrọ na ọnụọgụ abụọ anyị na akpọghị iwu ahụ target_include_directories. Isi okwu sitere na usoro ule na nke anyị Mylib::mylib, yana wuo paramita (n'ọnọdụ anyị, nke a bụ ọkọlọtọ asụsụ C ++) tinyere ebumnuche ndị a.

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

N'ikpeazụ, anyị na-emepụta ebumnuche dummy, "ewu" nke ya na ule na-agba ọsọ, ma gbakwunye ihe a na-ewu ewu (njirimara ahụ bụ maka nke a). ALL). Nke a pụtara na ihe nrụpụta ndabara na-akpalite ule na-agba ọsọ, nke pụtara na anyị agaghị echefu ịgba ọsọ ha.

add_custom_target(check ALL COMMAND mylib-unit-tests)

Mkpuchi

Na-esote, anyị na-eme ka nha mkpuchi koodu ma ọ bụrụ na akọwapụtara nhọrọ kwesịrị ekwesị. Agaghị m abanye n'ime nkọwa, n'ihi na ha na-emetụta ngwa ọrụ maka nha mkpuchi karịa CMake. Ọ dị mkpa naanị ịmara na dabere na nsonaazụ a ga-emepụta ihe mgbaru ọsọ coverage, nke ọ dị mma ịmalite ịlele mkpuchi.

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

Edemede maka akwụkwọ (doc/CmakeLists.txt)

Achọtara Doxygen.

find_package(Doxygen)

Ọzọ, anyị na-elele ma onye ọrụ etinyela mgbanwe asụsụ. Ọ bụrụ ee, mgbe ahụ, anyị anaghị emetụ ya aka, ọ bụrụ na ọ bụghị, mgbe ahụ, anyị na-ewere Russian. Mgbe ahụ, anyị na-ahazi faịlụ usoro Doxygen. Ngbanwe niile dị mkpa, gụnyere asụsụ, na-aga ebe ahụ n'oge nhazi nhazi (lee. команду configure_file).

Mgbe ahụ, anyị na-emepụta ihe mgbaru ọsọ doc, nke ga-amalite ịmepụta akwụkwọ. Ebe ọ bụ na iwepụta akwụkwọ abụghị ihe kacha mkpa na usoro mmepe, a gaghị eme ka ebumnobi pụta na ndabara; a ga-ewepụta ya n'ụzọ doro anya.

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

Ederede maka igbe sandbox dị n'ịntanetị (online/CmakeLists.txt)

N'ebe a, anyị na-ahụ Python nke atọ ma mepụta ebumnuche wandbox, nke na-ebute arịrịọ kwekọrọ na API ọrụ ahụ Wandbox, ma zilaga ya. Nzaghachi na-abịa na njikọ nke igbe ájá emechara.

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

Project n'èzí

Ugbu a, ka anyị leba anya ka esi eji ihe a niile.

Mgbakọ

Iwulite oru ngo a, dị ka ọrụ ọ bụla ọzọ na sistemụ nrụpụta CMake, nwere usoro abụọ:

Ọgbọ

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

Ọ bụrụ na iwu dị n'elu anaghị arụ ọrụ n'ihi ụdị CMake ochie, gbalịa wepụ ya -S:

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

Ndị ọzọ gbasara nhọrọ.

Iwuli oru ngo

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

Ndị ọzọ gbasara ebumnuche mgbakọ.

Nhọrọ

MYLIB_COVERAGE

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

Na-agụnye ebumnuche coverage, nke ị nwere ike ịmalite tụọ mkpuchi koodu site na ule.

MYLIB_TESTING

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

Na-enye ikike iji gbanyụọ nrụpụta otu nnwale na ebumnuche check. N'ihi ya, agbanyụrụ nha mkpuchi mkpuchi koodu site na ule (lee. MYLIB_COVERAGE).

A na-enwekwa nkwarụ nwale na-akpaghị aka ma ọ bụrụ na ejikọrọ ọrụ a na ọrụ ọzọ dị ka isiokwu na-eji iwu ahụ add_subdirectory.

MYLIB_DOXYGEN_LANGUAGE

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

Na-agbanwe asụsụ nke akwụkwọ nke ebumnuche na-ewepụta doc nye nke enyere. Maka ndepụta asụsụ dịnụ, hụ Ebe nrụọrụ weebụ sistemụ Doxygen.

Agbanyere Russian na ndabara.

Mgbakọ lekwasịrị anya

ndabara

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

Ọ bụrụ na akọwapụtaghị ebumnuche (nke dabara na ebumnuche all), na-anakọta ihe niile o nwere ike, ma na-akpọkwa ndị e lekwasịrị anya check.

mylib-unit-ule

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

Na-achịkọta ule otu. Agbanyere na ndabara.

ego

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

Na-agba ọsọ nke anakọtara (anakọtara, ọ bụrụ na ọ bụghị ugbua) ule otu. Agbanyere na ndabara.

Lee kwa mylib-unit-tests.

mkpuchi

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

Na-enyocha ọsọ (na-agba ọsọ, ma ọ bụrụ na ọ bụghị ugbua) nyocha otu maka mkpuchi koodu site na iji mmemme ahụ gkọvr.

Ihe mkpuchi mkpuchi mkpuchi ga-adị ka nke a:

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

Ebumnuche dị naanị mgbe agbanyere nhọrọ ahụ MYLIB_COVERAGE.

Lee kwa check.

DOC

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

Na-amalite ọgbọ nke koodu akwụkwọ site na iji usoro Ọkụ.

wandbox

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

Nzaghachi sitere na ọrụ ahụ dị ka nke a:

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

A na-eji ọrụ ahụ maka nke a Wandbox. Amaghị m otú ndị sava ha si na-agbanwe agbanwe, ma echere m na ohere a ekwesịghị imejọ.

atụ

Jiri nha mkpuchi wulite oru ngo a na ọnọdụ debug

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

Ịwụnye ọrụ na-enweghị mgbakọ mbụ na ule

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

Wulite n'ụdị ntọhapụ site na iji mkpokọta nyere

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

Na-emepụta akwụkwọ n'asụsụ Bekee

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

Ngwaọrụ

  1. Kpoo 3.13

    N'ezie, ụdị CMake 3.13 chọrọ naanị iji mee ụfọdụ iwu njikwa akọwara na enyemaka a. Site n'echiche nke syntax nke CMake scripts, ụdị 3.8 zuru ezu ma ọ bụrụ na a na-akpọ ọgbọ n'ụzọ ndị ọzọ.

  2. Ọbá akwụkwọ nnwale dọkịta

    Enwere ike gbanyụọ nnwale (lee опцию MYLIB_TESTING).

  3. Ọkụ

    Ka ịgbanwee asụsụ nke a ga-ewepụta akwụkwọ, a na-enye nhọrọ MYLIB_DOXYGEN_LANGUAGE.

  4. Ntụgharị asụsụ Python 3

    Maka ọgbọ akpaka igbe sandbox dị n'ịntanetị.

Nyocha static

Site na CMake na ngwaọrụ abụọ dị mma, ị nwere ike ịnye nyocha kwụ ọtọ na obere mbọ.

Cppcheck

CMake arụnyere n'ime nkwado maka ngwa nyocha static Cppcheck.

Iji mee nke a, ịkwesịrị iji nhọrọ CMAKE_CXX_CPPCHECK:

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

Mgbe nke a gasịrị, a ga-ewepụta nyocha static ozugbo ọ bụla achịkọtara ma chịkọtakwa isi mmalite ahụ. Ọ dịghị mkpa ime ihe ọ bụla ọzọ.

Ịda

Site n'enyemaka nke ngwá ọrụ magburu onwe ya scan-build Ị nwekwara ike ịme nyocha static n'oge adịghị anya:

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

N'ebe a, n'adịghị ka ikpe na Cppcheck, ịkwesịrị ịmegharị ihe ahụ oge ọ bụla scan-build.

Afterword

CMake bụ usoro dị ike ma na-agbanwe agbanwe nke na-enye gị ohere imejuputa ọrụ maka uto na agba ọ bụla. Na, ọ bụ ezie na syntax mgbe ụfọdụ na-ahapụ ọtụtụ ihe a chọrọ, ekwensu ka na-adịghị egwu dị ka ọ na-ese. Jiri CMake wu usoro maka abamuru nke ọha na eze.

Budata ndebiri ọrụ

isi: www.habr.com

Tinye a comment