CMake ndi C ++ ndi abale kwamuyaya

CMake ndi C ++ ndi abale kwamuyaya

Pachitukuko, ndimakonda kusintha ma compilers, ma modes, matembenuzidwe odalira, kusanthula static, kuyeza ntchito, kusonkhanitsa nkhani, kupanga zolemba, ndi zina zotero. Ndipo ndimakonda kwambiri CMake chifukwa imandilola kuchita chilichonse chomwe ndikufuna.

Anthu ambiri amatsutsa CMake, ndipo nthawi zambiri moyenerera, koma ngati muyang'ana, sizinthu zonse zomwe zili zoipa kwambiri, ndipo posachedwapa. osati zoipa konse, ndipo mayendedwe a chitukuko ndi abwino.

Muzolembazi, ndikufuna ndikuuzeni momwe mungapangire laibulale yamutu mu C ++ mu CMake system kuti mupeze magwiridwe antchito awa:

  1. Msonkhano;
  2. Mayeso a Autorun;
  3. Kuyeza kwa codec;
  4. Kuyika;
  5. Zolemba zokha;
  6. Kupanga sandbox pa intaneti;
  7. Kusanthula mosasunthika.

Aliyense amene amamvetsa kale ubwino ndi kupanga C akhoza mophweka tsitsani template ya polojekiti ndikuyamba kugwiritsa ntchito.


Zamkatimu

  1. Ntchito kuchokera mkati
    1. Kapangidwe ka polojekiti
    2. Fayilo yayikulu ya CMake (./CMakeLists.txt)
      1. Zambiri za polojekiti
      2. Zosankha za Project
      3. Zosankha zophatikiza
      4. Cholinga chachikulu
      5. kolowera
      6. Mayesero
      7. Zolemba
      8. Sandbox ya pa intaneti
    3. Zolemba zoyesa (test/CMakeLists.txt)
      1. Kuyesa
      2. Kuphimba
    4. Script ya zolemba (doc/CMakeLists.txt)
    5. Zolemba za sandbox pa intaneti (pa intaneti/CMakeLists.txt)
  2. Ntchito kunja
    1. Msonkhano
      1. M'badwo
      2. Msonkhano
    2. Zosankha
      1. MYLIB_COVERAGE
      2. MYLIB_TESTING
      3. MYLIB_DOXYGEN_LANGUAGE
    3. Zolinga za msonkhano
      1. zotsatira
      2. mylib-unit-mayeso
      3. fufuzani
      4. Kuphunzira
      5. Doc
      6. wandbox
    4. zitsanzo
  3. Zida
  4. Static Analysis
  5. Pambuyo pake

Ntchito kuchokera mkati

Kapangidwe ka polojekiti

.
β”œβ”€β”€ 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

Tidzakambirana makamaka za momwe tingapangire zolemba za CMake, kotero zidzakambidwa mwatsatanetsatane. Aliyense akhoza kuwona mafayilo onse mwachindunji pa tsamba la polojekiti ya template.

Fayilo yayikulu ya CMake (./CMakeLists.txt)

Zambiri za polojekiti

Choyamba, muyenera kupempha mtundu wofunikira wa CMake system. CMake ikusintha, ma signature amalamulo ndi machitidwe osiyanasiyana akusintha. Kuti CMake imvetsetse zomwe tikufuna kuchokera kwa iyo, tiyenera kulemba zomwe tikufuna.

cmake_minimum_required(VERSION 3.13)

Kenako tidzasankha polojekiti yathu, dzina lake, mtundu, zilankhulo zomwe zimagwiritsidwa ntchito, ndi zina zambiri (onani. ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ project).

Pamenepa timasonyeza chinenero CXX (ndipo izi zikutanthauza C ++) kuti CMake isavutike ndikufufuza chophatikiza chilankhulo cha C (mwachisawawa, CMake imaphatikizapo zilankhulo ziwiri: C ndi C ++).

project(Mylib VERSION 1.0 LANGUAGES CXX)

Apa mutha kuwona ngati polojekiti yathu ikuphatikizidwa mu projekiti ina ngati subproject. Izi zidzathandiza kwambiri m’tsogolo.

get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)

Zosankha za Project

Tidzapereka njira ziwiri.

Njira yoyamba ndi MYLIB_TESTING - kuletsa kuyesa mayunitsi. Izi zingakhale zofunikira ngati tikutsimikiza kuti zonse zikuyenda bwino ndi mayesero, koma timangofuna, mwachitsanzo, kukhazikitsa kapena kuyika polojekiti yathu. Kapena pulojekiti yathu ikuphatikizidwa ngati gawo laling'ono - pamenepa, wogwiritsa ntchito polojekiti yathu alibe chidwi choyesa mayeso athu. Simuyesa kudalira komwe mumagwiritsa ntchito, sichoncho?

option(MYLIB_TESTING "Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ тСстированиС" ON)

Kuphatikiza apo, tipanga njira yosiyana MYLIB_COVERAGE poyezera kufalikira kwa ma code ndi mayeso, koma pamafunika zida zowonjezera, chifukwa chake ziyenera kuthandizidwa momveka bwino.

option(MYLIB_COVERAGE "Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ покрытия ΠΊΠΎΠ΄Π° тСстами" OFF)

Zosankha zophatikiza

Zachidziwikire, ndife opanga mapulogalamu abwino, chifukwa chake tikufuna mulingo wapamwamba kwambiri wowunikira nthawi kuchokera kwa wopanga. Palibe mbewa imodzi yomwe ingadutse.

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
)

Tizimitsanso zowonjezera kuti tigwirizane kwathunthu ndi muyezo wa chilankhulo cha C ++. Amayatsidwa mwachisawawa mu CMake.

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

Cholinga chachikulu

Laibulale yathu imakhala ndi mafayilo apamutu okha, zomwe zikutanthauza kuti tilibe mphamvu zilizonse ngati malaibulale osasunthika kapena osinthika. Kumbali ina, kuti mugwiritse ntchito laibulale yathu kunja, iyenera kukhazikitsidwa, ikuyenera kuzindikirika mudongosolo ndikulumikizidwa ndi projekiti yanu, ndipo nthawi yomweyo mitu yomweyi, komanso mwina zina zowonjezera, amamangiriridwa kwa izo katundu.

Pachifukwa ichi, timapanga library library.

add_library(mylib INTERFACE)

Timamanga mitu ku library yathu yamawonekedwe.

Kugwiritsiridwa ntchito kwamakono, kwamakono, kwachinyamata kwa CMake kumatanthauza kuti mitu, katundu, ndi zina zotero. kufalikira kudzera mu chandamale chimodzi. Choncho zokwanira kunena target_link_libraries(target PRIVATE dependency), ndi mitu yonse yomwe ikugwirizana ndi chandamale dependency, idzapezeka kwa magwero omwe akutsata target. Ndipo simukusowa chilichonse [target_]include_directories. Izi zidzawonetsedwa pansipa pakuwunika CMake script pamayeso a unit.

M'pofunikanso kulabadira otchedwa. выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹: $<...>.

Lamuloli limagwirizanitsa mitu yomwe timafunikira ndi laibulale yathu yolumikizira, ndipo ngati laibulale yathu ilumikizidwa ndi chandamale chilichonse chomwe chili muulamuliro womwewo wa CMake, ndiye kuti mitu yochokera m'ndandandayo ilumikizidwa nayo. ${CMAKE_CURRENT_SOURCE_DIR}/include, ndipo ngati laibulale yathu yaikidwa pa dongosolo ndikugwirizanitsa ndi polojekiti ina pogwiritsa ntchito lamulo find_package, ndiye kuti mitu yochokera ku bukhulo idzalumikizidwa nayo include zokhudzana ndi chikwatu chokhazikitsa.

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

Tiyeni tiyike muyezo wa chilankhulo. Inde, wotsiriza kwambiri. Panthawi imodzimodziyo, sikuti timangophatikizapo muyezo, komanso timawonjezera kwa iwo omwe adzagwiritse ntchito laibulale yathu. Izi zimatheka chifukwa chakuti katundu wokhazikitsidwa ali ndi gulu INTERFACE (onani target_compile_features lamulo).

target_compile_features(mylib INTERFACE cxx_std_17)

Tiyeni tipange dzina lalaibulale yathu. Komanso, chifukwa cha kukongola, idzakhala mu "namespace" yapadera. Izi zitha kukhala zothandiza pamene ma module osiyanasiyana akuwonekera mulaibulale yathu, ndipo timapita kukawalumikiza iwowo pawokha. Monga ku Busta, mwachitsanzo.

add_library(Mylib::mylib ALIAS mylib)

kolowera

Kuyika mitu yathu mudongosolo. Zonse ndi zophweka apa. Tikunena kuti chikwatu chomwe chili ndi mitu yonse chiyenera kulowa m'ndandanda include zokhudzana ndi malo oyikapo.

install(DIRECTORY include/mylib DESTINATION include)

Kenako, timadziwitsa dongosolo lomanga lomwe tikufuna kuti titha kuyitanitsa ma projekiti a chipani chachitatu find_package(Mylib) ndi kupeza cholinga Mylib::mylib.

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

Mawu otsatirawa ayenera kumveka motere. Pamene mu polojekiti ya chipani chachitatu timatcha lamulo find_package(Mylib 1.2.3 REQUIRED), ndipo mtundu weniweni wa laibulale yoikidwayo sudzagwirizana ndi mtunduwo 1.2.3CMake imangopanga cholakwika. Ndiko kuti, simudzasowa kutsatira Mabaibulo pamanja.

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)

Mayesero

Ngati mayeso aletsedwa kugwiritsa ntchito momveka bwino njira yofananira kapena polojekiti yathu ndi gawo, ndiko kuti, imalumikizidwa ndi projekiti ina ya CMake pogwiritsa ntchito lamulo add_subdirectory, sitimasunthira motsatira maulamuliro, ndipo script, yomwe ikufotokoza malamulo opangira ndi kuyesa mayesero, sichimathamanga.

if(NOT MYLIB_TESTING)
    message(STATUS "ВСстированиС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Mylib Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ")
elseif(IS_SUBPROJECT)
    message(STATUS "Mylib Π½Π΅ тСстируСтся Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ подмодуля")
else()
    add_subdirectory(test)
endif()

Zolemba

Zolemba sizidzapangidwanso ngati gawo laling'ono.

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

Sandbox ya pa intaneti

Momwemonso, gawoli silikhala ndi bokosi la mchenga pa intaneti.

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

Zolemba zoyesa (test/CMakeLists.txt)

Kuyesa

Choyamba, timapeza phukusi lokhala ndi mayeso ofunikira (m'malo mwa omwe mumakonda).

find_package(doctest 2.3.3 REQUIRED)

Tiyeni tipange fayilo yathu yoyeserera ndi mayeso. Nthawi zambiri ndimawonjezera mwachindunji pabinale yomwe ingathe kuchitika kokha fayilo yomwe idzakhala ndi ntchitoyi main.

add_executable(mylib-unit-tests test_main.cpp)

Ndipo ndimawonjezera mafayilo omwe mayesowo amafotokozedwa pambuyo pake. Koma simukuyenera kuchita zimenezo.

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

Timagwirizanitsa zitsulo. Chonde dziwani kuti tidangogwirizanitsa zolinga za CMake zomwe timafunikira ku binary yathu ndipo sitinayitane lamulo target_include_directories. Mitu yochokera pamayeso oyeserera komanso athu Mylib::mylib, komanso kumanga magawo (kwa ife, ichi ndi chikhalidwe cha chinenero cha C ++) chinabwera pamodzi ndi zolinga izi.

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

Pomaliza, timapanga chandamale cha dummy, "kumanga" komwe kuli kofanana ndi kuyesa mayeso, ndikuwonjezera chandamale pakumanga kosasintha (lingaliroli ndi lomwe limayambitsa izi. ALL). Izi zikutanthauza kuti kupanga kosasinthika kumayambitsa mayesero kuti ayambe, kutanthauza kuti sitidzaiwala kuwayendetsa.

add_custom_target(check ALL COMMAND mylib-unit-tests)

Kuphimba

Chotsatira, timayatsa kuyeza kwa codec ngati njira yoyenera yatchulidwa. Sindingafotokoze zambiri, chifukwa zimagwirizana kwambiri ndi chida choyezera kufalikira kuposa CMake. Ndikofunika kuzindikira kuti kutengera zotsatira zomwe cholinga chidzapangidwa coverage, yomwe ndi yabwino kuyamba kuyeza kufalitsa.

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 ya zolemba (doc/CMakeLists.txt)

Anapeza Doxygen.

find_package(Doxygen)

Kenako, timayang'ana ngati wogwiritsa ntchitoyo wakhazikitsa chilankhulo chosinthika. Ngati inde, ndiye kuti sitikhudza, ngati sichoncho, ndiye kuti timatenga Chirasha. Kenako timakonza mafayilo amtundu wa Do oxygen. Zosintha zonse zofunika, kuphatikiza chilankhulo, zimapita pamenepo panthawi yosinthira (onani. ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ configure_file).

Kenako timapanga cholinga doc, yomwe idzayamba kupanga zolemba. Popeza kupanga zolemba sikofunikira kwambiri pakupanga chitukuko, chandamale sichidzathandizidwa mwachisawawa; iyenera kukhazikitsidwa momveka bwino.

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

Zolemba za sandbox pa intaneti (pa intaneti/CMakeLists.txt)

Apa tikupeza Python yachitatu ndikupanga chandamale wandbox, zomwe zimapanga pempho lofanana ndi API ya utumiki Wandbox, namutumiza apite. Yankho limabwera ndi ulalo ku sandbox yomalizidwa.

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

Ntchito kunja

Tsopano tiyeni tiwone momwe tingagwiritsire ntchito zonsezi.

Msonkhano

Kumanga pulojekitiyi, monga ntchito ina iliyonse pa CMake build system, ili ndi magawo awiri:

M'badwo

cmake -S ΠΏΡƒΡ‚ΡŒ/ΠΊ/исходникам -B ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ [ΠΎΠΏΡ†ΠΈΠΈ ...]

Ngati lamulo pamwambapa silinagwire ntchito chifukwa cha mtundu wakale wa CMake, yesani kusiya -S:

cmake ΠΏΡƒΡ‚ΡŒ/ΠΊ/исходникам -B ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ [ΠΎΠΏΡ†ΠΈΠΈ ...]

Zambiri za zosankha.

Kumanga polojekiti

cmake --build ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ [--target target]

Zambiri za zolinga za msonkhano.

Zosankha

MYLIB_COVERAGE

cmake -S ... -B ... -DMYLIB_COVERAGE=ON [ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ ...]

Kuphatikizapo chandamale coverage, yomwe mungayambe kuyeza kufalikira kwa ma code ndi mayeso.

MYLIB_TESTING

cmake -S ... -B ... -DMYLIB_TESTING=OFF [ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ ...]

Amapereka kuthekera koletsa kupanga mayunitsi ndi cholinga check. Zotsatira zake, kuyeza kwa kuphimba ma code ndi mayeso kumazimitsidwa (onani. MYLIB_COVERAGE).

Kuyesa kumayimitsidwanso ngati pulojekiti ilumikizidwa ndi projekiti ina ngati subproject pogwiritsa ntchito lamulo add_subdirectory.

MYLIB_DOXYGEN_LANGUAGE

cmake -S ... -B ... -DMYLIB_DOXYGEN_LANGUAGE=English [ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ ΠΎΠΏΡ†ΠΈΠΈ ...]

Kusintha chinenero cha zolembedwa zomwe chandamale chimapanga doc kwa wopatsidwa. Kuti muwone mndandanda wazinenero zomwe zilipo, onani Webusaiti ya Doxygen System.

Russian imathandizidwa ndi kusakhazikika.

Zolinga za msonkhano

zotsatira

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

Ngati chandamale sichinatchulidwe (chomwe chiri chofanana ndi chandamale all), amasonkhanitsa zonse zomwe angathe, ndikuyitananso chandamale check.

mylib-unit-mayeso

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

Amapanga mayeso a mayunitsi. Yathandizidwa mwachisawawa.

fufuzani

cmake --build ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ --target check

Imayendetsa zoyesa zomwe zasonkhanitsidwa (zosonkhanitsidwa, ngati sizinalipo kale). Yathandizidwa mwachisawawa.

Onaninso mylib-unit-tests.

Kuphunzira

cmake --build ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ --target coverage

Imasanthula kuthamanga (imatha, ngati sichoncho) kuyesa kwa mayunitsi kuti ipezeke ndi mayeso pogwiritsa ntchito pulogalamuyo gvr.

Kutulutsa kotulutsa kumawoneka motere:

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

Cholingacho chimapezeka pokhapokha ngati njirayo yatha MYLIB_COVERAGE.

Onaninso check.

Doc

cmake --build ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ --target doc

Imayamba kupanga zolemba zama code pogwiritsa ntchito dongosolo Dothi la oxygen.

wandbox

cmake --build ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ --target wandbox

Mayankho a msonkhanowo amawoneka motere:

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

Ntchitoyi imagwiritsidwa ntchito pa izi Wandbox. Sindikudziwa momwe ma seva awo amasinthira, koma ndikuganiza kuti mwayiwu suyenera kugwiritsidwa ntchito molakwika.

zitsanzo

Mangani pulojekitiyi munjira yochotsa zolakwika ndi muyeso wa kuphimba

cmake -S ΠΏΡƒΡ‚ΡŒ/ΠΊ/исходникам -B ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ -DCMAKE_BUILD_TYPE=Debug -DMYLIB_COVERAGE=ON
cmake --build ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ --target coverage --parallel 16

Kukhazikitsa polojekiti popanda kusonkhana koyambirira ndi kuyesa

cmake -S ΠΏΡƒΡ‚ΡŒ/ΠΊ/исходникам -B ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ -DMYLIB_TESTING=OFF -DCMAKE_INSTALL_PREFIX=ΠΏΡƒΡ‚ΡŒ/ΠΊ/установойной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ
cmake --build ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ --target install

Pangani mumayendedwe omasulidwa ndi compiler yopatsidwa

cmake -S ΠΏΡƒΡ‚ΡŒ/ΠΊ/исходникам -B ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=g++-8 -DCMAKE_PREFIX_PATH=ΠΏΡƒΡ‚ΡŒ/ΠΊ/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ/ΠΊΡƒΠ΄Π°/установлСны/зависимости
cmake --build ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ --parallel 4

Kupanga zolemba mu Chingerezi

cmake -S ΠΏΡƒΡ‚ΡŒ/ΠΊ/исходникам -B ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ -DCMAKE_BUILD_TYPE=Release -DMYLIB_DOXYGEN_LANGUAGE=English
cmake --build ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ --target doc

Zida

  1. CMake 3.13

    M'malo mwake, CMake mtundu 3.13 imangofunika kuyendetsa ena mwa malamulo a console omwe afotokozedwa mu chithandizochi. Kuchokera pamalingaliro a syntax ya CMake scripts, mtundu 3.8 ndi wokwanira ngati m'badwo umatchedwa mwanjira zina.

  2. Kuyesa laibulale dokotala

    Kuyesa kumatha kuyimitsidwa (onani ΠΎΠΏΡ†ΠΈΡŽ MYLIB_TESTING).

  3. Dothi la oxygen

    Kuti musinthe chilankhulo chomwe zolembazo zidzapangidwira, njira imaperekedwa MYLIB_DOXYGEN_LANGUAGE.

  4. Womasulira chinenero Python 3

    Zopangira zokha sandboxes pa intaneti.

Static Analysis

Ndi CMake ndi zida zingapo zabwino, mutha kupereka kusanthula kosasunthika mosavutikira.

Cppcheck

CMake ili ndi chithandizo chokhazikika cha chida chowunikira chokhazikika Cppcheck.

Kuti muchite izi muyenera kugwiritsa ntchito njira CMAKE_CXX_CPPCHECK:

cmake -S ΠΏΡƒΡ‚ΡŒ/ΠΊ/исходникам -B ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_CPPCHECK="cppcheck;--enable=all;-IΠΏΡƒΡ‚ΡŒ/ΠΊ/исходникам/include"

Pambuyo pa izi, kusanthula kosasunthika kumangoyambika nthawi iliyonse pomwe gwero likuphatikizidwa ndikusinthidwanso. Palibe chifukwa chochitira china chilichonse.

kulira

Mothandizidwa ndi chida chodabwitsa scan-build Mukhozanso kuyendetsa static analysis posakhalitsa:

scan-build cmake -S ΠΏΡƒΡ‚ΡŒ/ΠΊ/исходникам -B ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ -DCMAKE_BUILD_TYPE=Debug
scan-build cmake --build ΠΏΡƒΡ‚ΡŒ/ΠΊ/сборочной/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ

Apa, mosiyana ndi Cppcheck, muyenera kuyendetsa kumanga nthawi zonse scan-build.

Pambuyo pake

CMake ndi dongosolo lamphamvu kwambiri komanso losinthika lomwe limakupatsani mwayi wogwiritsa ntchito kukoma ndi mtundu uliwonse. Ndipo, ngakhale mawuwa nthawi zina amasiya kukhumbitsidwa, mdierekezi akadali woyipa monga momwe amapakidwira. Gwiritsani ntchito CMake build system kuti mupindule ndi anthu komanso thanzi.

β†’ Tsitsani template ya polojekiti

Source: www.habr.com

Kuwonjezera ndemanga