Thaum lub sij hawm kev loj hlob, kuv nyiam hloov compilers, tsim hom, dependency versions, ua zoo li qub tsom xam, ntsuas kev ua tau zoo, sau cov kev pab them nqi, tsim cov ntaub ntawv, thiab lwm yam. Thiab kuv yeej hlub CMake vim nws tso cai rau kuv ua txhua yam kuv xav tau.
Ntau tus neeg thuam CMake, thiab feem ntau deservedly li ntawd, tab sis yog tias koj saib nws, tsis yog txhua yam yog phem heev, thiab tsis ntev los no. tsis phem kiag li, thiab cov kev taw qhia ntawm kev loj hlob yog qhov zoo heev.
Hauv daim ntawv no, kuv xav qhia koj yuav ua li cas yooj yim teeb tsa lub tsev qiv ntawv header hauv C ++ hauv CMake system kom tau txais cov haujlwm hauv qab no:
- Kev sib dhos;
- Autorun kev xeem;
- Kev ntsuas kev ntsuas kev ntsuas;
- Kev teeb tsa;
- Auto-cov ntaub ntawv;
- Online sandbox tiam;
- Kev soj ntsuam zoo li qub.
Leej twg twb nkag siab qhov zoo thiab C-ua tau yooj yim
download tau qhov project template thiab pib siv nws.
Txheem
Qhov project los ntawm sab hauv Qhov project sab nraud Cov cuab yeej Kev soj ntsuam zoo li qub Tom qab ntawd
Qhov project los ntawm sab hauv
Qhov project qauv
.
βββ 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
Peb yuav tham txog yuav ua li cas npaj CMake scripts, yog li lawv yuav tau tham nyob rau hauv kom meej. Leej twg tuaj yeem saib cov ntaub ntawv seem ncaj qha
Main CMake file (./CMakeLists.txt)
Cov ntaub ntawv project
Ua ntej ntawm tag nrho cov, koj yuav tsum tau thov qhov yuav tsum tau version ntawm CMake system. CMake tab tom hloov zuj zus, kev kos npe kos npe thiab tus cwj pwm hauv cov xwm txheej sib txawv tau hloov pauv. Txhawm rau CMake kom nkag siab tam sim ntawd qhov peb xav tau los ntawm nws, peb yuav tsum tau sau tam sim peb cov cai rau nws.
cmake_minimum_required(VERSION 3.13)
Tom qab ntawd peb yuav xaiv peb qhov project, nws lub npe, version, hom lus siv, thiab lwm yam (saib. ΠΊΠΎΠΌΠ°Π½Π΄Ρ project
Hauv qhov no peb qhia cov lus CXX
(thiab qhov no txhais tau tias C ++) kom CMake tsis strain thiab tshawb rau C lus compiler (los ntawm lub neej ntawd, CMake suav nrog ob hom lus: C thiab C ++).
project(Mylib VERSION 1.0 LANGUAGES CXX)
Ntawm no koj tuaj yeem tshawb xyuas tam sim ntawd seb peb qhov project puas suav nrog lwm qhov project raws li qhov project sub. Qhov no yuav pab tau ntau yam yav tom ntej.
get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)
Kev xaiv qhov project
Peb yuav muab ob txoj kev xaiv.
Thawj qhov kev xaiv yog MYLIB_TESTING
option(MYLIB_TESTING "ΠΠΊΠ»ΡΡΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅" ON)
Tsis tas li ntawd, peb yuav ua ib qho kev xaiv cais MYLIB_COVERAGE
option(MYLIB_COVERAGE "ΠΠΊΠ»ΡΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ" OFF)
Kev xaiv muab tso ua ke
Ntawm chav kawm, peb yog txias ntxiv rau cov programmers, yog li peb xav tau qib siab tshaj plaws ntawm kev suav sau-sijhawm kuaj mob los ntawm lub compiler. Tsis yog ib tus nas yuav hla dhau.
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
)
Peb tseem yuav lov tes taw extensions thiaj li ua tau raws li C++ tus qauv lus. Lawv tau qhib los ntawm lub neej ntawd hauv CMake.
if(NOT CMAKE_CXX_EXTENSIONS)
set(CMAKE_CXX_EXTENSIONS OFF)
endif()
lub hom phiaj tseem ceeb
Peb lub tsev qiv ntawv tsuas muaj cov ntaub ntawv header xwb, uas txhais tau hais tias peb tsis muaj qhov tso pa tawm hauv daim ntawv ntawm cov tsev qiv ntawv zoo li qub lossis dynamic. Ntawm qhov tod tes, txhawm rau siv peb lub tsev qiv ntawv sab nraud, nws yuav tsum tau teeb tsa, nws yuav tsum tau kuaj pom hauv qhov system thiab txuas nrog koj qhov project, thiab tib lub sijhawm cov headers tib yam, nrog rau qee qhov ntxiv, txuas rau nws cov khoom.
Rau lub hom phiaj no, peb tsim ib lub tsev qiv ntawv interface.
add_library(mylib INTERFACE)
Peb khi headers rau peb lub tsev qiv ntawv interface.
Niaj hnub nimno, fashionable, hluas siv CMake implies hais tias headers, khoom, thiab lwm yam. kis tau los ntawm ib lub hom phiaj. Yog li txaus nws hais target_link_libraries(target PRIVATE dependency)
dependency
, yuav muaj rau qhov chaw teej tug mus rau lub hom phiaj target
. Thiab koj tsis tas yuav muaj [target_]include_directories
. Qhov no yuav qhia tau hais tias hauv qab no hauv kev txheeb xyuas
Nws tseem tsim nyog them nqi rau qhov hu ua. Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ: $<...>
Cov lus txib no koom nrog cov headers peb xav tau nrog peb lub tsev qiv ntawv interface, thiab yog tias peb lub tsev qiv ntawv txuas nrog txhua lub hom phiaj hauv tib lub CMake hierarchy, ces cov headers los ntawm cov npe yuav cuam tshuam nrog nws. ${CMAKE_CURRENT_SOURCE_DIR}/include
, thiab yog tias peb lub tsev qiv ntawv tau nruab rau ntawm lub kaw lus thiab txuas nrog lwm qhov project siv cov lus txib find_package
include
txheeb ze rau lub installation directory.
target_include_directories(mylib INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
Wb teem ib hom lus. Tau kawg, kawg kawg. Nyob rau tib lub sijhawm, peb tsis tsuas suav nrog tus qauv, tab sis kuj txuas ntxiv rau cov neeg uas yuav siv peb lub tsev qiv ntawv. Qhov no yog ua tiav vim qhov tseeb tias cov cuab yeej teeb tsa muaj qeb INTERFACE
(saib
target_compile_features(mylib INTERFACE cxx_std_17)
Cia peb tsim ib lub npe rau peb lub tsev qiv ntawv. Ntxiv mus, rau kev zoo nkauj, nws yuav nyob rau hauv tshwj xeeb "namespace". Qhov no yuav muaj txiaj ntsig zoo thaum cov qauv sib txawv tshwm sim hauv peb lub tsev qiv ntawv, thiab peb mus txuas rau lawv tus kheej ntawm ib leeg.
add_library(Mylib::mylib ALIAS mylib)
chaw
Txhim kho peb cov headers rau hauv qhov system. Txhua yam yooj yim ntawm no. Peb hais tias cov ntawv tais ceev tseg nrog tag nrho cov headers yuav tsum mus rau hauv phau ntawv teev npe include
txheeb ze rau qhov chaw installation.
install(DIRECTORY include/mylib DESTINATION include)
Tom ntej no, peb qhia rau tus tsim system uas peb xav kom muaj peev xwm hu rau cov lus txib nyob rau hauv peb-tog tej yaam num find_package(Mylib)
thiab tau lub hom phiaj Mylib::mylib
.
install(TARGETS mylib EXPORT MylibConfig)
install(EXPORT MylibConfig NAMESPACE Mylib:: DESTINATION share/Mylib/cmake)
Cov lus sau tom ntej yuav tsum to taub li no. Thaum nyob rau hauv peb tes num peb hu rau cov lus txib find_package(Mylib 1.2.3 REQUIRED)
, thiab qhov tseeb version ntawm lub tsev qiv ntawv ntsia yuav incompatible nrog lub version 1.2.3
CMake yuav cia li tsim qhov yuam kev. Ntawd yog, koj yuav tsis tas yuav taug qab versions manually.
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)
Kev sim
Yog tias cov kev ntsuam xyuas raug cuam tshuam los ntawm kev siv add_subdirectory
if(NOT MYLIB_TESTING)
message(STATUS "Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Mylib Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΎ")
elseif(IS_SUBPROJECT)
message(STATUS "Mylib Π½Π΅ ΡΠ΅ΡΡΠΈΡΡΠ΅ΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡΠ»Ρ")
else()
add_subdirectory(test)
endif()
Ntaub ntawv
Cov ntaub ntawv tseem yuav tsis raug tsim nyob rau hauv cov ntaub ntawv ntawm ib qhov project sub.
if(NOT IS_SUBPROJECT)
add_subdirectory(doc)
endif()
Online sandbox
Ib yam li ntawd, qhov project subproject yuav tsis muaj online sandbox ib yam nkaus.
if(NOT IS_SUBPROJECT)
add_subdirectory(online)
endif()
Test tsab ntawv (test/CMakeLists.txt)
Kev Ntsuam Xyuas
Ua ntej tshaj plaws, peb pom ib pob nrog cov txheej txheem xeem uas xav tau (hloov nrog koj nyiam).
find_package(doctest 2.3.3 REQUIRED)
Cia peb tsim peb cov ntaub ntawv executable nrog kev xeem. Feem ntau kuv ntxiv ncaj qha rau executable binary tsuas yog cov ntaub ntawv uas yuav muaj cov haujlwm main
.
add_executable(mylib-unit-tests test_main.cpp)
Thiab kuv ntxiv cov ntaub ntawv uas qhov kev xeem lawv tus kheej tau piav qhia tom qab. Tab sis koj tsis tas yuav ua li ntawd.
target_sources(mylib-unit-tests PRIVATE mylib/myfeature.cpp)
Peb txuas kev vam meej. Thov nco ntsoov tias peb txuas tsuas yog CMake lub hom phiaj peb xav tau rau peb binary thiab tsis hu rau cov lus txib target_include_directories
. Cov ncauj lus los ntawm lub hauv paus kev xeem thiab los ntawm peb Mylib::mylib
, nrog rau kev tsim tsis tau (hauv peb qhov xwm txheej, qhov no yog C ++ tus qauv lus) tuaj nrog rau cov hom phiaj no.
target_link_libraries(mylib-unit-tests
PRIVATE
Mylib::mylib
doctest::doctest
)
Thaum kawg, peb tsim lub hom phiaj dummy, "tsim" uas yog sib npaug rau kev xeem khiav, thiab ntxiv lub hom phiaj no rau lub neej ntawd tsim (tus cwj pwm yog lub luag haujlwm rau qhov no. ALL
). Qhov no txhais tau hais tias lub neej ntawd tsim ua rau cov kev xeem khiav, txhais tau tias peb yuav tsis hnov ββββqab khiav lawv.
add_custom_target(check ALL COMMAND mylib-unit-tests)
Kev pab them nqi
Tom ntej no, peb qhib kev ntsuas kev ntsuas yog tias qhov kev xaiv tsim nyog tau teev tseg. Kuv yuav tsis nkag mus rau hauv cov ntsiab lus, vim tias lawv cuam tshuam ntau dua rau cov cuab yeej ntsuas kev ntsuas dua li CMake. Nws tsuas yog ib qho tseem ceeb uas yuav tsum nco ntsoov tias raws li cov txiaj ntsig ib lub hom phiaj yuav raug tsim 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()
Tsab ntawv rau cov ntaub ntawv (doc/CMakeLists.txt)
find_package(Doxygen)
Tom ntej no, peb xyuas seb tus neeg siv puas tau teeb tsa cov lus sib txawv. Yog tias muaj, peb tsis kov nws, yog tias tsis yog, peb coj Lavxias. Tom qab ntawd peb teeb tsa Doxygen system cov ntaub ntawv. Txhua qhov kev hloov pauv tsim nyog, suav nrog cov lus, mus rau qhov ntawd thaum lub sijhawm teeb tsa (saib. ΠΊΠΎΠΌΠ°Π½Π΄Ρ configure_file
Tom qab ntawd peb tsim lub hom phiaj 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 ()
Tsab ntawv rau online sandbox (online/CMakeLists.txt)
Ntawm no peb pom Python thib peb thiab tsim lub hom phiaj 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()
Qhov project sab nraud
Tam sim no cia saib yuav ua li cas siv tag nrho cov no.
Sib dhos
Tsim qhov project no, zoo li lwm qhov project ntawm CMake tsim, muaj ob theem:
Tiam
cmake -S ΠΏΡΡΡ/ΠΊ/ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠ°ΠΌ -B ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ [ΠΎΠΏΡΠΈΠΈ ...]
Yog hais tias cov lus txib saum toj no tsis ua hauj lwm vim yog ib tug qub version ntawm CMake, sim omitting
-S
:cmake ΠΏΡΡΡ/ΠΊ/ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠ°ΠΌ -B ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ [ΠΎΠΏΡΠΈΠΈ ...]
Tsim qhov project
cmake --build ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ [--target target]
Xaiv
MYLIB_COVERAGE
cmake -S ... -B ... -DMYLIB_COVERAGE=ON [ΠΏΡΠΎΡΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ ...]
suav nrog lub hom phiaj coverage
MYLIB_TESTING
cmake -S ... -B ... -DMYLIB_TESTING=OFF [ΠΏΡΠΎΡΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ ...]
Muab lub peev xwm los lov tes taw chav kuaj tsim thiab lub hom phiaj check
MYLIB_COVERAGE
Kev kuaj kuj tseem raug kaw yog tias qhov project txuas nrog rau lwm qhov project raws li subproject siv cov lus txib add_subdirectory
MYLIB_DOXYGEN_LANGUAGE
cmake -S ... -B ... -DMYLIB_DOXYGEN_LANGUAGE=English [ΠΏΡΠΎΡΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ ...]
Hloov cov lus ntawm cov ntaub ntawv uas lub hom phiaj tsim doc
Lavxias teb sab yog enabled los ntawm lub neej ntawd.
Cov hom phiaj sib dhos
los ntawm neej ntawd hais
cmake --build path/to/build/directory
cmake --build path/to/build/directory --target all
Yog tias lub hom phiaj tsis tau teev tseg (uas yog sib npaug rau lub hom phiaj all
), sau txhua yam nws ua tau, thiab tseem hu rau lub hom phiaj check
mylib-unit-tests
cmake --build path/to/build/directory --target mylib-unit-tests
Compiles chav kuaj. Enabled los ntawm lub neej ntawd.
xyuas
cmake --build ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ --target check
Khiav cov khoom sau (sau, yog tias tsis tau) chav kuaj. Enabled los ntawm lub neej ntawd.
Saib kuj mylib-unit-tests
kev pab them nqi
cmake --build ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ --target coverage
Txheeb xyuas kev khiav haujlwm (khiav, yog tias tsis yog lawm) chav ntsuas kev ntsuas rau cov cai tswj hwm los ntawm kev sim siv qhov program
Lub coatings yuav zoo li no:
------------------------------------------------------------------------------
GCC Code Coverage Report
Directory: /path/to/cmakecpptemplate/include/
------------------------------------------------------------------------------
File Lines Exec Cover Missing
------------------------------------------------------------------------------
mylib/myfeature.hpp 2 2 100%
------------------------------------------------------------------------------
TOTAL 2 2 100%
------------------------------------------------------------------------------
Lub hom phiaj tsuas yog muaj thaum qhov kev xaiv tau qhib MYLIB_COVERAGE
Saib kuj check
doc
cmake --build ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ --target doc
Pib tsim cov ntaub ntawv code siv lub system
wandbox
cmake --build ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ --target wandbox
Cov lus teb los ntawm kev pabcuam zoo li no:
{
"permlink" : "QElvxuMzHgL9fqci",
"status" : "0",
"url" : "https://wandbox.org/permlink/QElvxuMzHgL9fqci"
}
Kev pabcuam yog siv rau qhov no
piv txwv
Tsim qhov project hauv hom kev debug nrog kev ntsuas kev ntsuas
cmake -S ΠΏΡΡΡ/ΠΊ/ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠ°ΠΌ -B ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ -DCMAKE_BUILD_TYPE=Debug -DMYLIB_COVERAGE=ON
cmake --build ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ --target coverage --parallel 16
Txhim kho qhov project yam tsis muaj kev sib dhos ua ntej thiab kev sim
cmake -S ΠΏΡΡΡ/ΠΊ/ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠ°ΠΌ -B ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ -DMYLIB_TESTING=OFF -DCMAKE_INSTALL_PREFIX=ΠΏΡΡΡ/ΠΊ/ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΉΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ
cmake --build ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ --target install
Tsim nyob rau hauv kev tso tawm hom nrog ib tug muab compiler
cmake -S ΠΏΡΡΡ/ΠΊ/ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠ°ΠΌ -B ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=g++-8 -DCMAKE_PREFIX_PATH=ΠΏΡΡΡ/ΠΊ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ/ΠΊΡΠ΄Π°/ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ/Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
cmake --build ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ --parallel 4
Tsim cov ntaub ntawv ua lus Askiv
cmake -S ΠΏΡΡΡ/ΠΊ/ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠ°ΠΌ -B ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ -DCMAKE_BUILD_TYPE=Release -DMYLIB_DOXYGEN_LANGUAGE=English
cmake --build ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ --target doc
Cov cuab yeej
-
Cawv 3.13Qhov tseeb, CMake version 3.13 tsuas yog yuav tsum tau khiav qee cov lus txib console tau piav qhia hauv qhov kev pab no. Los ntawm qhov pom ntawm cov syntax ntawm CMake scripts, version 3.8 yog txaus yog tias tiam hu ua lwm txoj kev.
-
Cov tsev qiv ntawv xeem
tus kws kho mob Kev sim tuaj yeem ua tsis taus (saib
).ΠΎΠΏΡΠΈΡ MYLIB_TESTING
-
Txhawm rau hloov cov lus uas cov ntaub ntawv yuav raug tsim tawm, muaj kev xaiv
.MYLIB_DOXYGEN_LANGUAGE
-
Tus neeg txhais lus
Nab hab sej 3 Rau tiam tsis siv neeg
online sandboxes .
Kev soj ntsuam zoo li qub
Nrog CMake thiab ob peb cov cuab yeej zoo, koj tuaj yeem muab kev soj ntsuam zoo li qub nrog kev siv zog tsawg.
Cppcheck
CMake muaj kev txhawb nqa rau cov cuab yeej ntsuas zoo li qub
Ua li no koj yuav tsum siv qhov kev xaiv CMAKE_CXX_CPPCHECK
cmake -S ΠΏΡΡΡ/ΠΊ/ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠ°ΠΌ -B ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_CPPCHECK="cppcheck;--enable=all;-IΠΏΡΡΡ/ΠΊ/ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠ°ΠΌ/include"
Tom qab qhov no, kev txheeb xyuas zoo li qub yuav raug tso tawm txhua lub sij hawm qhov chaw muab tso ua ke thiab rov ua dua. Tsis tas yuav ua dab tsi ntxiv.
Txhab
Nrog kev pab los ntawm lub cuab yeej zoo scan-build
scan-build cmake -S ΠΏΡΡΡ/ΠΊ/ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠ°ΠΌ -B ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ -DCMAKE_BUILD_TYPE=Debug
scan-build cmake --build ΠΏΡΡΡ/ΠΊ/ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΉ/Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ
Ntawm no, tsis zoo li rooj plaub nrog Cppcheck, koj yuav tsum tau khiav qhov tsim txhua lub sijhawm scan-build
.
Tom qab ntawd
CMake yog qhov muaj zog heev thiab hloov tau yooj yim uas tso cai rau koj los siv ua haujlwm rau txhua tus saj thiab xim. Thiab, txawm hais tias cov syntax qee zaum tawm ntau yam xav tau, dab ntxwg nyoog tseem tsis txaus ntshai li nws tau pleev xim. Siv CMake tsim qhov system kom muaj txiaj ntsig zoo rau tib neeg thiab kev noj qab haus huv.
β
Tau qhov twg los: www.hab.com