Tha CMake agus C ++ nam bràithrean gu bràth

Tha CMake agus C ++ nam bràithrean gu bràth

Rè leasachadh, is toil leam luchd-cruinneachaidh atharrachadh, modhan togail, dreachan eisimeileachd, mion-sgrùdadh statach a dhèanamh, coileanadh a thomhas, còmhdach a chruinneachadh, sgrìobhainnean a ghineadh, msaa. Agus tha gaol mòr agam air CMake oir leigidh e leam a h-uile dad a tha mi ag iarraidh a dhèanamh.

Bidh mòran dhaoine a’ càineadh CMake, agus gu tric airidh air, ach ma choimheadas tu air, chan eil a h-uile dad cho dona, agus o chionn ghoirid chan eil e dona idir, agus tha an stiùireadh leasachaidh gu math dòchasach.

Anns an nota seo, tha mi airson innse dhut mar as urrainn dhut dìreach leabharlann cinn a chuir air dòigh ann an C ++ ann an siostam CMake gus an gnìomh a leanas fhaighinn:

  1. Seanadh;
  2. Autorun deuchainnean;
  3. Tomhas còmhdach còd;
  4. Stàladh;
  5. Auto-sgrìobhainnean;
  6. Gineadh bogsa gainmhich air-loidhne;
  7. Mion-sgrùdadh statach.

Faodaidh duine sam bith a tha mar-thà a 'tuigsinn na buannachdan agus C-dèanamh gu sìmplidh Luchdaich a-nuas am pròiseact templates. agus tòisich ga chleachdadh.


Clàr-innse

  1. Pròiseact bhon taobh a-staigh a-nuas
    1. Structar pròiseict
    2. Prìomh fhaidhle CMake (./CMakeLists.txt)
      1. Fiosrachadh pròiseact
      2. Roghainnean pròiseict
      3. Roghainnean cruinneachaidh
      4. Amas bun-sgoile
      5. suidheachadh
      6. Deuchainnean
      7. Sgrìobhainnean
      8. Bogsa gainmhich air loidhne an
    3. Sgriobt deuchainn (deuchainn/CMakeLists.txt)
      1. Deuchainn
      2. Rannsachadh
    4. Sgriobt airson sgrìobhainnean (doc/CMakeLists.txt)
    5. Sgriobt airson bogsa gainmhich air-loidhne (air-loidhne/CMakeLists.txt)
  2. Pròiseact taobh a-muigh
    1. Tionndadh
      1. Ginealach
      2. Tionndadh
    2. Roghainnean
      1. MYLIB_COVERAGE
      2. MYLIB_TESTING
      3. MYLIB_DOXYGEN_LANGUAGE
    3. Targaidean co-chruinneachadh
      1. bho thùs
      2. mylib-aonad-deuchainn
      3. sùil
      4. craoladh
      5. doc
      6. bogsa-slaodaidh
    4. eisimpleirean
  3. Innealan
  4. Mion-sgrùdadh statach
  5. Post-d gu caraid

Pròiseact bhon taobh a-staigh a-nuas

Structar pròiseict

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

Bruidhnidh sinn sa mhòr-chuid air mar a chuireas tu sgriobtaichean CMake air dòigh, agus mar sin thèid beachdachadh orra gu mionaideach. Faodaidh duine sam bith an còrr de na faidhlichean fhaicinn gu dìreach air an duilleag teamplaid pròiseact.

Prìomh fhaidhle CMake (./CMakeLists.txt)

Fiosrachadh pròiseact

An toiseach, feumaidh tu an dreach riatanach den t-siostam CMake iarraidh. Tha CMake a’ tighinn air adhart, tha ainmean-sgrìobhte àithne agus giùlan ann an diofar shuidheachaidhean ag atharrachadh. Gus an tuig CMake sa bhad na tha sinn ag iarraidh bhuaithe, feumaidh sinn na riatanasan againn air a shon a chlàradh sa bhad.

cmake_minimum_required(VERSION 3.13)

An uairsin ainmichidh sinn ar pròiseact, a h-ainm, dreach, na cànanan a thathar a’ cleachdadh, msaa (faic. команду project).

Anns a 'chùis seo bidh sinn a' comharrachadh a 'chànain CXX (agus tha seo a’ ciallachadh C ++) gus nach bi CMake a’ teannachadh agus a’ lorg inneal-cruinneachaidh cànain C (gu gnàthach, tha CMake a’ toirt a-steach dà chànan: C agus C ++).

project(Mylib VERSION 1.0 LANGUAGES CXX)

An seo faodaidh tu dearbhadh sa bhad a bheil am pròiseact againn air a ghabhail a-steach ann am pròiseact eile mar fho-phròiseact. Cuidichidh seo mòran san àm ri teachd.

get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)

Roghainnean pròiseict

Bheir sinn seachad dà roghainn.

Tha a 'chiad roghainn MYLIB_TESTING - gus deuchainnean aonaid a chuir dheth. Is dòcha gum bi seo riatanach ma tha sinn cinnteach gu bheil a h-uile càil ann an òrdugh leis na deuchainnean, ach chan eil sinn ag iarraidh ach, mar eisimpleir, ar pròiseact a chuir a-steach no a phacadh. No tha am pròiseact againn air a ghabhail a-steach mar fho-phròiseact - anns a ’chùis seo, chan eil ùidh aig neach-cleachdaidh a’ phròiseict againn na deuchainnean againn a ruith. Cha bhith thu a’ dèanamh deuchainn air na eisimeileachd a bhios tu a’ cleachdadh, a bheil?

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

A bharrachd air an sin, nì sinn roghainn air leth MYLIB_COVERAGE airson còmhdach còd a thomhas le deuchainnean, ach bidh feum air innealan a bharrachd, agus mar sin feumar a chomasachadh gu soilleir.

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

Roghainnean cruinneachaidh

Gu dearbh, tha sinn nar prògramadairean fionnar a bharrachd, agus mar sin tha sinn ag iarraidh an ìre as àirde de dhiagnosis ùine cruinneachaidh bhon neach-cruinneachaidh. Cha tèid aon luchag troimhe.

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
)

Cuiridh sinn à comas leudachaidhean cuideachd gus gèilleadh gu h-iomlan ri inbhe cànain C++. Tha iad air an comasachadh gu bunaiteach ann an CMake.

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

Amas bun-sgoile

Chan eil anns an leabharlann againn ach faidhlichean cinn, a tha a’ ciallachadh nach eil inneal-fuadain againn ann an cruth leabharlannan statach no fiùghantach. Air an làimh eile, gus an leabharlann againn a chleachdadh air an taobh a-muigh, feumar a chuir a-steach, feumaidh e a bhith air a lorg san t-siostam agus ceangailte ris a’ phròiseact agad, agus aig an aon àm na h-aon chinn-cinn sin, a bharrachd air is dòcha feadhainn a bharrachd, ceangailte ris na feartan aige.

Airson an adhbhair seo, bidh sinn a’ cruthachadh leabharlann eadar-aghaidh.

add_library(mylib INTERFACE)

Bidh sinn a’ ceangal cinn-cinn ris an leabharlann eadar-aghaidh againn.

Tha cleachdadh ùr-nodha, fasanta, òigridh de CMake a’ ciallachadh gu bheil cinn-cinn, feartan, msaa. air a ghluasad tro aon targaid. Mar sin gu leòr ri ràdh target_link_libraries(target PRIVATE dependency), agus a h-uile bann-cinn a tha co-cheangailte ris an targaid dependency, bidh e ri fhaighinn airson stòran a bhuineas don targaid target. Agus chan eil feum agad air gin [target_]include_directories. Thèid seo a shealltainn gu h-ìosal anns an anailis CMake sgriobt airson deuchainnean aonad.

Is fhiach cuideachd aire a thoirt don rud ris an canar. выражения-генераторы: $<...>.

Bidh an àithne seo a’ ceangal na cinn a tha a dhìth oirnn leis an leabharlann eadar-aghaidh againn, agus ma tha an leabharlann againn ceangailte ri targaid sam bith taobh a-staigh an aon rangachd CMake, bidh na cinn-cinn bhon eòlaire co-cheangailte ris ${CMAKE_CURRENT_SOURCE_DIR}/include, agus ma tha an leabharlann againn air a chuir a-steach air an t-siostam agus ceangailte ri pròiseact eile a’ cleachdadh an àithne find_package, an uairsin bidh cinn-cinn bhon eòlaire co-cheangailte ris include an coimeas ris an eòlaire stàlaidh.

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

Suidhich sinn inbhe cànain. Gu dearbh, an tè mu dheireadh. Aig an aon àm, chan e a-mhàin gu bheil sinn a’ toirt a-steach an inbhe, ach cuideachd ga leudachadh chun fheadhainn a chleachdas an leabharlann againn. Tha seo air a choileanadh air sgàth gu bheil roinn aig an togalach seata INTERFACE (faic targaid_compile_features àithne).

target_compile_features(mylib INTERFACE cxx_std_17)

Cruthaichidh sinn alias airson ar leabharlann. A bharrachd air an sin, airson bòidhchead, bidh e ann an “space name” sònraichte. Bidh seo feumail nuair a nochdas diofar mhodalan anns an leabharlann againn, agus thèid sinn gan ceangal gu neo-eisimeileach bho chèile. Mar ann am Busta, mar eisimpleir.

add_library(Mylib::mylib ALIAS mylib)

suidheachadh

A’ stàladh ar cinn-cinn san t-siostam. Tha a h-uile dad sìmplidh an seo. Tha sinn ag ràdh gum bu chòir am pasgan leis na cinn-cinn gu lèir a dhol a-steach don eòlaire include co-cheangailte ris an àite stàlaidh.

install(DIRECTORY include/mylib DESTINATION include)

An ath rud, bidh sinn ag innse don t-siostam togail gu bheil sinn airson a bhith comasach air an àithne a ghairm ann am pròiseactan treas-phàrtaidh find_package(Mylib) agus faigh amas Mylib::mylib.

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

Bu chòir an ath litreachadh a thuigsinn mar seo. Nuair a bhios sinn ann am pròiseact treas-phàrtaidh canar sinn an àithne find_package(Mylib 1.2.3 REQUIRED), agus bidh an fhìor dhreach den leabharlann stàlaichte neo-chòrdail ris an dreach 1.2.3Cruthaichidh CMake mearachd gu fèin-ghluasadach. Is e sin, cha leig thu leas sùil a chumail air dreachan le làimh.

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)

Deuchainnean

Ma tha deuchainnean ciorramach a’ cleachdadh gu sònraichte roghainn co-fhreagarrach no tha am pròiseact againn na fho-phròiseact, is e sin, tha e ceangailte ri pròiseact CMake eile a’ cleachdadh an àithne add_subdirectory, cha bhith sinn a’ gluasad nas fhaide air adhart san rangachd, agus chan eil an sgriobt, a tha a’ toirt cunntas air na h-òrdughan airson deuchainnean a ghineadh is a ruith, a’ ruith.

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

Sgrìobhainnean

Cha tèid sgrìobhainnean a chruthachadh cuideachd a thaobh fo-phròiseact.

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

Bogsa gainmhich air loidhne an

Mar an ceudna, cha bhi bogsa gainmhich air-loidhne aig an fho-phròiseact nas motha.

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

Sgriobt deuchainn (deuchainn/CMakeLists.txt)

Deuchainn

An toiseach, lorg sinn pasgan leis an fhrèam deuchainn riatanach (cuir an àite am fear as fheàrr leat).

find_package(doctest 2.3.3 REQUIRED)

Cruthaichidh sinn ar faidhle so-ghnìomhaichte le deuchainnean. Mar as trice bidh mi a’ cur gu dìreach ris an dàna so-ghnìomhaichte a-mhàin am faidhle anns am bi an gnìomh main.

add_executable(mylib-unit-tests test_main.cpp)

Agus cuiridh mi faidhlichean anns a bheil na deuchainnean fhèin air am mìneachadh nas fhaide air adhart. Ach chan fheum thu sin a dhèanamh.

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

Bidh sinn a 'ceangal eisimeileachd. Thoir an aire nach do cheangail sinn ach na targaidean CMake a dh’ fheumadh sinn ris a’ bhiadh-dìnnear againn agus nach do ghairm sinn an àithne target_include_directories. Cinn bhon fhrèam deuchainn agus bhon fheadhainn againn Mylib::mylib, a bharrachd air crìochan togail (anns a’ chùis againn, is e seo an inbhe cànain C ++) a thàinig troimhe còmhla ris na h-amasan sin.

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

Mu dheireadh, cruthaichidh sinn targaid meallta, agus tha an “tog” dheth co-ionann ri bhith a’ ruith dheuchainnean, agus cuiridh sinn an targaid seo ris an togail bunaiteach (tha am feart an urra ri seo ALL). Tha seo a’ ciallachadh gum brosnaich an togail bunaiteach na deuchainnean a ruith, a’ ciallachadh nach dìochuimhnich sinn gu bràth an ruith.

add_custom_target(check ALL COMMAND mylib-unit-tests)

Rannsachadh

An uairsin, bidh sinn a’ comasachadh tomhas còmhdach còd ma tha an roghainn iomchaidh air a shònrachadh. Cha tèid mi a-steach gu mion-fhiosrachadh, oir tha iad nas ceangailte ri inneal airson còmhdach a thomhas na ri CMake. Tha e cudromach cuimhneachadh gum bi amas air a chruthachadh stèidhichte air na toraidhean coverage, leis a bheil e goireasach tòiseachadh air còmhdach a thomhas.

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

Sgriobt airson sgrìobhainnean (doc/CMakeLists.txt)

Lorgar Doxygen.

find_package(Doxygen)

An ath rud, nì sinn sgrùdadh a bheil an neach-cleachdaidh air an caochladair cànain a shuidheachadh. Ma tha, an uairsin cha bhith sinn a’ beantainn ris, mura h-eil, gabhaidh sinn Ruiseanach. An uairsin bidh sinn a’ rèiteachadh na faidhlichean siostam Doxygen. Bidh na caochladairean riatanach uile, a’ toirt a-steach a’ chànan, a’ dol ann tron ​​phròiseas rèiteachaidh (faic. команду configure_file).

An uairsin bidh sinn a 'cruthachadh amas doc, a thòisicheas a’ cruthachadh sgrìobhainnean. Leis nach e cruthachadh sgrìobhainnean an fheum as motha sa phròiseas leasachaidh, cha bhith an targaid air a chomasachadh gu bunaiteach; feumar a chuir air bhog gu soilleir.

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

Sgriobt airson bogsa gainmhich air-loidhne (air-loidhne/CMakeLists.txt)

An seo lorg sinn an treas Python agus cruthaichidh sinn targaid wandbox, a ghineas iarrtas a fhreagras ris an API seirbheis Bogsa-laighe, agus cuiridh e air falbh e. Tha am freagairt a’ tighinn le ceangal ris a’ bhogsa-gainmhich chrìochnaichte.

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

Pròiseact taobh a-muigh

A-nis leig dhuinn sùil a thoirt air mar a chleachdas tu seo uile.

Tionndadh

Tha togail a’ phròiseict seo, mar phròiseact sam bith eile air siostam togail CMake, air a dhèanamh suas de dhà ìre:

Ginealach

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

Mura do dh'obraich an àithne gu h-àrd air sgàth seann dhreach de CMake, feuch ri fàgail às -S:

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

Tuilleadh mu roghainnean.

A 'togail a' phròiseact

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

Tuilleadh mu amasan co-chruinneachaidh.

Roghainnean

MYLIB_COVERAGE

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

A’ toirt a-steach targaid coverage, leis an urrainn dhut tòiseachadh air còmhdach còd a thomhas le deuchainnean.

MYLIB_TESTING

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

A’ toirt seachad comas togail deuchainn aonad agus targaid a chuir dheth check. Mar thoradh air an sin, tha tomhas còmhdach còd le deuchainnean air a chuir dheth (faic. MYLIB_COVERAGE).

Tha deuchainn cuideachd air a chiorramachadh gu fèin-ghluasadach ma tha am pròiseact ceangailte ri pròiseact eile mar fho-phròiseact a’ cleachdadh an àithne add_subdirectory.

MYLIB_DOXYGEN_LANGUAGE

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

Ag atharrachadh cànan nan sgrìobhainnean a bhios an targaid a’ gineadh doc ris an ti a thugadh. Airson liosta de na cànanan a tha rim faighinn, faic Làrach-lìn siostam doxygen.

Tha Ruiseanach air a chomasachadh gu bunaiteach.

Targaidean co-chruinneachadh

bho thùs

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

Mura h-eil an targaid air a shònrachadh (a tha co-ionann ris an targaid all), a 'cruinneachadh a h-uile rud as urrainn dha, agus cuideachd a' gairm an targaid check.

mylib-aonad-deuchainn

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

A 'cur ri chèile deuchainnean aonad. Air a chomasachadh gu bunaiteach.

sùil

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

A’ ruith na deuchainnean aonad cruinnichte (cruinnichte, mura h-eil mar-thà). Air a chomasachadh gu bunaiteach.

Faic cuideachd mylib-unit-tests.

craoladh

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

Mion-sgrùdadh a 'ruith (a' ruith, mura h-eil mar-thà) deuchainnean aonad airson còmhdach còd le deuchainnean a 'cleachdadh a' phrògram gcovr.

Bidh an còmhdach còmhdach a’ coimhead rudeigin mar seo:

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

Chan eil an targaid ri fhaighinn ach nuair a tha an roghainn air a chomasachadh MYLIB_COVERAGE.

Faic cuideachd check.

doc

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

A’ tòiseachadh a’ gineadh sgrìobhainnean còd a’ cleachdadh an t-siostam doxygen.

bogsa-slaodaidh

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

Tha am freagairt bhon t-seirbheis a’ coimhead rudeigin mar seo:

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

Tha an t-seirbheis air a chleachdadh airson seo Bogsa-laighe. Chan eil fios agam dè cho sùbailte sa tha na frithealaichean aca, ach tha mi a’ smaoineachadh nach bu chòir an cothrom seo a chleachdadh.

eisimpleirean

Tog am pròiseact ann am modh deasbaid le tomhas còmhdaich

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

A 'stàladh pròiseact às aonais co-chruinneachadh agus deuchainn tòiseachaidh

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

Tog ann am modh fuasglaidh le inneal-cruinneachaidh sònraichte

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

A’ cruthachadh sgrìobhainnean sa Bheurla

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

Innealan

  1. CMake 3.13

    Gu dearbh, chan eil feum air CMake dreach 3.13 ach gus cuid de na h-òrdughan tòcan a tha air am mìneachadh sa chuideachadh seo a ruith. Bho shealladh co-chòrdadh sgriobtaichean CMake, tha dreach 3.8 gu leòr ma thèid ginealach a ghairm ann an dòighean eile.

  2. Leabharlann deuchainn doctest

    Faodar deuchainn a chuir à comas (faic опцию MYLIB_TESTING).

  3. doxygen

    Gus an cànan anns an tèid na sgrìobhainnean atharrachadh, tha roghainn air a thoirt seachad MYLIB_DOXYGEN_LANGUAGE.

  4. Eadar-theangair cànain Python 3

    Airson gineadh fèin-ghluasadach bogsaichean gainmhich air-loidhne.

Mion-sgrùdadh statach

Le CMake agus inneal no dhà math, faodaidh tu mion-sgrùdadh statach a thoirt seachad gun mòran oidhirp.

Cppcheck

Tha taic stèidhichte aig CMake airson inneal sgrùdaidh statach Cppcheck.

Gus seo a dhèanamh feumaidh tu an roghainn a chleachdadh CMAKE_CXX_CPPCHECK:

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

Às deidh seo, thèid mion-sgrùdadh statach a chuir air bhog gu fèin-ghluasadach a h-uile uair a thèid an stòr a chuir ri chèile agus ath-chruinneachadh. Chan eil feum air dad a bharrachd a dhèanamh.

clang

Le cuideachadh bho inneal iongantach scan-build Faodaidh tu cuideachd mion-sgrùdadh statach a ruith ann an ùine sam bith:

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

An seo, eu-coltach ris a’ chùis le Cppcheck, feumaidh tu an togail a ruith a h-uile turas troimhe scan-build.

Post-d gu caraid

Tha CMake na shiostam gu math cumhachdach agus sùbailte a leigeas leat gnìomhachd a chuir an gnìomh airson gach blas agus dath. Agus, ged a dh’ fhàgas an co-chòrdadh air uairean mòran ri bhith air a mhiannachadh, chan eil an diabhal fhathast cho uamhasach sa tha e air a pheantadh. Cleachd siostam togail CMake airson buannachd comann-sòisealta agus slàinte.

Luchdaich a-nuas am pròiseact templates

Source: www.habr.com

Cuir beachd ann