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:
- Msonkhano;
- Mayeso a Autorun;
- Kuyeza kwa codec;
- Kuyika;
- Zolemba zokha;
- Kupanga sandbox pa intaneti;
- Kusanthula mosasunthika.
Aliyense amene amamvetsa kale ubwino ndi kupanga C akhoza mophweka
tsitsani template ya polojekiti ndikuyamba kugwiritsa ntchito.
Zamkatimu
Ntchito kuchokera mkati Ntchito kunja Zida Static Analysis 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
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
option(MYLIB_TESTING "ΠΠΊΠ»ΡΡΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅" ON)
Kuphatikiza apo, tipanga njira yosiyana MYLIB_COVERAGE
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)
dependency
, idzapezeka kwa magwero omwe akutsata target
. Ndipo simukusowa chilichonse [target_]include_directories
. Izi zidzawonetsedwa pansipa pakuwunika
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
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(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.
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.3
CMake 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 add_subdirectory
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
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)
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
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
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 ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ [ΠΎΠΏΡΠΈΠΈ ...]
Kumanga polojekiti
cmake --build ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ [--target target]
Zosankha
MYLIB_COVERAGE
cmake -S ... -B ... -DMYLIB_COVERAGE=ON [ΠΏΡΠΎΡΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ ...]
Kuphatikizapo chandamale coverage
MYLIB_TESTING
cmake -S ... -B ... -DMYLIB_TESTING=OFF [ΠΏΡΠΎΡΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ ...]
Amapereka kuthekera koletsa kupanga mayunitsi ndi cholinga check
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
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
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
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
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
-
CMake 3.13M'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.
-
Kuyesa laibulale
dokotala Kuyesa kumatha kuyimitsidwa (onani
).ΠΎΠΏΡΠΈΡ MYLIB_TESTING
-
Kuti musinthe chilankhulo chomwe zolembazo zidzapangidwira, njira imaperekedwa
.MYLIB_DOXYGEN_LANGUAGE
-
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
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
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.
β
Source: www.habr.com