CMake ati C ++ jẹ arakunrin lailai

CMake ati C ++ jẹ arakunrin lailai

Lakoko idagbasoke, Mo nifẹ lati yi awọn olupilẹṣẹ pada, kọ awọn ipo, awọn ẹya igbẹkẹle, ṣe itupalẹ aimi, wiwọn iṣẹ ṣiṣe, gba agbegbe, ṣe ipilẹṣẹ iwe, ati bẹbẹ lọ. Ati pe Mo nifẹ CMake gaan nitori pe o gba mi laaye lati ṣe ohun gbogbo ti Mo fẹ.

Ọpọlọpọ eniyan ṣofintoto CMake, ati nigbagbogbo tọsi bẹ, ṣugbọn ti o ba wo, kii ṣe ohun gbogbo buru pupọ, ati laipẹ. ko buburu ni gbogbo, ati awọn itọsọna ti idagbasoke jẹ ohun rere.

Ninu akọsilẹ yii, Mo fẹ lati sọ fun ọ bi o ṣe le ṣeto iwe-ikawe akọsori nirọrun ni C ++ ninu eto CMake lati gba iṣẹ ṣiṣe atẹle:

  1. Apejọ;
  2. Autorun igbeyewo;
  3. Iwọn wiwọn koodu;
  4. Fifi sori ẹrọ;
  5. Iwe-ipamọ aifọwọyi;
  6. Online sandbox iran;
  7. Ayẹwo aimi.

Ẹnikẹni ti o ba ti loye awọn anfani ati C-ṣe le nirọrun download ise agbese awoṣe ki o si bẹrẹ lilo.


Awọn akoonu

  1. Ise agbese lati inu
    1. Ilana ise agbese
    2. Faili CMake akọkọ (./CmakeLists.txt)
      1. Alaye ise agbese
      2. Project Aw
      3. Awọn aṣayan akojọpọ
      4. akọkọ ìlépa
      5. eto
      6. Awọn idanwo
      7. Iwe akosilẹ
      8. Online sandbox
    3. Idanwo iwe afọwọkọ (idanwo/CmakeLists.txt)
      1. Igbeyewo
      2. Ibora
    4. Iwe afọwọkọ fun iwe (doc/CmakeLists.txt)
    5. Iwe afọwọkọ fun apoti iyanrin lori ayelujara (online/CmakeLists.txt)
  2. Ise agbese ita
    1. Apejọ
      1. Iran
      2. Apejọ
    2. Awọn aṣayan
      1. MYLIB_COVERAGE
      2. MYLIB_TESTING
      3. MYLIB_DOXYGEN_LANGUAGE
    3. Apejọ fojusi
      1. Nipa aiyipada
      2. mylib-kuro-igbeyewo
      3. ṣayẹwo
      4. agbegbe
      5. doc
      6. apoti
    4. Awọn apẹẹrẹ
  3. Awọn irin-iṣẹ
  4. Ayẹwo aimi
  5. Lẹhin Ọrọ

Ise agbese lati inu

Ilana ise agbese

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

A yoo sọ nipataki bi o ṣe le ṣeto awọn iwe afọwọkọ CMake, nitorinaa wọn yoo jiroro ni awọn alaye. Ẹnikẹni le wo awọn iyokù ti awọn faili taara lori iwe ise agbese awoṣe.

Faili CMake akọkọ (./CmakeLists.txt)

Alaye ise agbese

Ni akọkọ, o nilo lati beere ẹya ti o nilo ti eto CMake. CMake n yipada, awọn ibuwọlu aṣẹ ati ihuwasi ni awọn ipo oriṣiriṣi n yipada. Ni ibere fun CMake lẹsẹkẹsẹ ni oye ohun ti a fẹ lati ọdọ rẹ, a nilo lati gbasilẹ lẹsẹkẹsẹ awọn ibeere wa fun rẹ.

cmake_minimum_required(VERSION 3.13)

Lẹhinna a yoo ṣe apẹrẹ iṣẹ akanṣe wa, orukọ rẹ, ẹya, awọn ede ti a lo, ati bẹbẹ lọ (wo. команду project).

Ni idi eyi a tọka ede naa CXX (ati pe eyi tumọ si C ++) ki CMake ko ni igara ati wa fun akojọpọ ede C kan (nipa aiyipada, CMake pẹlu awọn ede meji: C ati C ++).

project(Mylib VERSION 1.0 LANGUAGES CXX)

Nibi o le ṣayẹwo lẹsẹkẹsẹ boya iṣẹ akanṣe wa wa ninu iṣẹ akanṣe miiran bi iṣẹ akanṣe kan. Eyi yoo ṣe iranlọwọ pupọ ni ọjọ iwaju.

get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)

Project Aw

A yoo pese awọn aṣayan meji.

Aṣayan akọkọ ni MYLIB_TESTING - lati mu awọn idanwo kuro. Eyi le jẹ pataki ti a ba ni idaniloju pe ohun gbogbo wa ni ibere pẹlu awọn idanwo, ṣugbọn a fẹ nikan, fun apẹẹrẹ, lati fi sori ẹrọ tabi ṣajọ iṣẹ akanṣe wa. Tabi iṣẹ akanṣe wa pẹlu bi iṣẹ akanṣe kan - ninu ọran yii, olumulo ti iṣẹ akanṣe wa ko nifẹ si ṣiṣe awọn idanwo wa. Iwọ ko ṣe idanwo awọn igbẹkẹle ti o lo, ṣe iwọ?

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

Ni afikun, a yoo ṣe aṣayan lọtọ MYLIB_COVERAGE fun wiwọn koodu agbegbe nipasẹ awọn idanwo, ṣugbọn yoo nilo awọn irinṣẹ afikun, nitorinaa yoo nilo lati mu ṣiṣẹ ni gbangba.

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

Awọn aṣayan akojọpọ

Nitoribẹẹ, a jẹ itura pẹlu awọn pirogirama, nitorinaa a fẹ ipele ti o pọ julọ ti awọn iwadii akoko iṣakojọpọ lati olupilẹṣẹ. Ko si asin kan ti yoo yọ nipasẹ.

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
)

A yoo tun mu awọn amugbooro kuro lati le ni ibamu ni kikun pẹlu boṣewa ede C++. Wọn ti ṣiṣẹ nipasẹ aiyipada ni CMake.

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

akọkọ ìlépa

Ile-ikawe wa ni awọn faili akọsori nikan, eyiti o tumọ si pe a ko ni eefi eyikeyi ni irisi aimi tabi awọn ile ikawe ti o ni agbara. Ni apa keji, lati le lo ile-ikawe wa ni ita, o nilo lati fi sori ẹrọ, o nilo lati wa ni wiwa ninu eto ati sopọ si iṣẹ akanṣe rẹ, ati ni akoko kanna awọn akọle kanna, bakanna bi o ṣee ṣe diẹ ninu awọn afikun, ti wa ni so si o-ini.

Fun idi eyi, a ṣẹda ohun ni wiwo ìkàwé.

add_library(mylib INTERFACE)

A di awọn akọle si ile-ikawe wiwo wa.

Igbalode, asiko, lilo ọdọ ti CMake tumọ si pe awọn akọle, awọn ohun-ini, ati bẹbẹ lọ. zqwq nipasẹ ọkan nikan afojusun. Nitorina o to lati sọ target_link_libraries(target PRIVATE dependency), ati gbogbo awọn akọle ti o ni nkan ṣe pẹlu ibi-afẹde dependency, yoo wa fun awọn orisun ti o jẹ ti ibi-afẹde target. Ati pe o ko nilo eyikeyi [target_]include_directories. Eyi yoo ṣe afihan ni isalẹ ni itupalẹ CMake akosile fun awọn igbeyewo kuro.

O tun tọ lati san ifojusi si ohun ti a npe ni. выражения-генераторы: $<...>.

Aṣẹ yii ṣepọ awọn akọsori ti a nilo pẹlu ile-ikawe wiwo wa, ati pe ti ile-ikawe wa ba ni asopọ si ibi-afẹde eyikeyi laarin awọn ilana CMake kanna, lẹhinna awọn akọle lati itọsọna naa yoo ni nkan ṣe pẹlu rẹ. ${CMAKE_CURRENT_SOURCE_DIR}/include, ati ti o ba ti wa ìkàwé ti fi sori ẹrọ lori awọn eto ati ki o ti sopọ si miiran ise agbese nipa lilo awọn pipaṣẹ find_package, lẹhinna awọn akọle lati inu itọsọna naa yoo ni nkan ṣe pẹlu rẹ include ojulumo si awọn fifi sori liana.

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

Jẹ ká ṣeto a ede bošewa. Dajudaju, awọn gan kẹhin. Lẹ́sẹ̀ kan náà, kì í ṣe pé a fi ọ̀pá ìdiwọ̀n kún un nìkan, ṣùgbọ́n a tún máa ń gbòòrò sí i fún àwọn tí yóò lo ibi ìkówèésí wa. Eyi jẹ aṣeyọri nitori otitọ pe ohun-ini ṣeto ni ẹka kan INTERFACE (cm. target_compile_features pipaṣẹ).

target_compile_features(mylib INTERFACE cxx_std_17)

Jẹ ki a ṣẹda inagijẹ fun ile-ikawe wa. Pẹlupẹlu, fun ẹwa, yoo wa ni "aaye orukọ" pataki kan. Eyi yoo wulo nigbati awọn modulu oriṣiriṣi ba han ninu ile-ikawe wa, ati pe a lọ lati sopọ wọn ni ominira ti ara wa. Bi ni Busta, fun apẹẹrẹ.

add_library(Mylib::mylib ALIAS mylib)

eto

Fifi awọn akọle wa sinu eto naa. Ohun gbogbo ni o rọrun nibi. A sọ pe folda pẹlu gbogbo awọn akọle yẹ ki o lọ sinu itọsọna naa include ojulumo si awọn fifi sori ipo.

install(DIRECTORY include/mylib DESTINATION include)

Nigbamii ti, a sọ fun eto kikọ ti a fẹ lati ni anfani lati pe aṣẹ ni awọn iṣẹ akanṣe ẹnikẹta find_package(Mylib) ki o si gba ibi-afẹde kan Mylib::mylib.

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

Akọtọ atẹle yẹ ki o loye ni ọna yii. Nigbati o ba wa ni iṣẹ akanṣe ẹnikẹta a pe aṣẹ naa find_package(Mylib 1.2.3 REQUIRED), ati ẹya gidi ti ile-ikawe ti a fi sii yoo jẹ ibamu pẹlu ẹya naa 1.2.3CMake yoo ṣe ipilẹṣẹ aṣiṣe laifọwọyi. Iyẹn ni, iwọ kii yoo nilo lati tọpa awọn ẹya pẹlu ọwọ.

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)

Awọn idanwo

Ti awọn idanwo ba wa ni alaabo ni ṣoki ni lilo ti o baamu aṣayan tabi iṣẹ akanṣe wa jẹ iṣẹ akanṣe, iyẹn ni, o ti sopọ si iṣẹ akanṣe CMake miiran nipa lilo aṣẹ naa add_subdirectory, a ko gbe siwaju pẹlu awọn logalomomoise, ati awọn akosile, eyi ti o se apejuwe awọn ofin fun ti o npese ati ki o nṣiṣẹ igbeyewo, nìkan ko ni ṣiṣe.

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

Iwe akosilẹ

Awọn iwe-ipamọ kii yoo tun ṣe ipilẹṣẹ ni ọran ti iṣẹ-ṣiṣe-ṣiṣe kan.

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

Online sandbox

Bakanna, iṣẹ akanṣe ko ni ni apoti iyanrin lori ayelujara boya.

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

Idanwo iwe afọwọkọ (idanwo/CmakeLists.txt)

Igbeyewo

Ni akọkọ, a rii package kan pẹlu ilana idanwo ti o nilo (rọpo pẹlu ọkan ayanfẹ rẹ).

find_package(doctest 2.3.3 REQUIRED)

Jẹ ki a ṣẹda faili ti o le ṣiṣẹ pẹlu awọn idanwo. Nigbagbogbo Mo ṣafikun taara si alakomeji ti o ṣiṣẹ nikan faili ti yoo ni iṣẹ naa main.

add_executable(mylib-unit-tests test_main.cpp)

Ati pe Mo ṣafikun awọn faili ninu eyiti awọn idanwo tikararẹ ti ṣe apejuwe nigbamii. Ṣugbọn o ko ni lati ṣe bẹ.

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

A so awọn igbẹkẹle. Jọwọ ṣe akiyesi pe a sopọ mọ awọn ibi-afẹde CMake nikan ti a nilo si alakomeji wa ati pe ko pe aṣẹ naa target_include_directories. Awọn akọle lati ilana idanwo ati lati ọdọ tiwa Mylib::mylib, bakannaa kọ awọn paramita (ninu ọran wa, eyi ni boṣewa ede C ++) wa nipasẹ awọn ibi-afẹde wọnyi.

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

Lakotan, a ṣẹda ibi-afẹde kan, “itumọ” eyiti o jẹ deede si awọn idanwo ṣiṣe, ati ṣafikun ibi-afẹde yii si kikọ aiyipada (ẹya naa jẹ iduro fun eyi ALL). Eyi tumọ si pe kikọ aiyipada nfa awọn idanwo lati ṣiṣẹ, afipamo pe a kii yoo gbagbe lati ṣiṣe wọn.

add_custom_target(check ALL COMMAND mylib-unit-tests)

Ibora

Nigbamii, a mu iwọn wiwọn koodu ṣiṣẹ ti aṣayan ti o yẹ ba jẹ pato. Emi kii yoo lọ sinu awọn alaye, nitori wọn ni ibatan diẹ sii si ọpa kan fun wiwọn agbegbe ju CMake lọ. O ṣe pataki nikan lati ṣe akiyesi pe da lori awọn abajade ti ibi-afẹde kan yoo ṣẹda coverage, pẹlu eyiti o rọrun lati bẹrẹ wiwọn agbegbe.

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

Iwe afọwọkọ fun iwe (doc/CmakeLists.txt)

Ti ri Doxygen.

find_package(Doxygen)

Nigbamii, a ṣayẹwo boya olumulo ti ṣeto oniyipada ede. Ti o ba jẹ bẹẹni, lẹhinna a ko fi ọwọ kan, ti kii ba ṣe bẹ, lẹhinna a mu Russian. Lẹhinna a tunto awọn faili eto Doxygen. Gbogbo awọn oniyipada pataki, pẹlu ede, lọ sibẹ lakoko ilana iṣeto (wo. команду configure_file).

Lẹhinna a ṣẹda ibi-afẹde kan doc, eyi ti yoo bẹrẹ ti ipilẹṣẹ iwe. Niwọn igba ti awọn iwe ti ipilẹṣẹ kii ṣe iwulo nla julọ ninu ilana idagbasoke, ibi-afẹde naa kii yoo ṣiṣẹ nipasẹ aiyipada; yoo ni lati ṣe ifilọlẹ ni gbangba.

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

Iwe afọwọkọ fun apoti iyanrin lori ayelujara (online/CmakeLists.txt)

Nibi a rii Python kẹta ati ṣẹda ibi-afẹde kan wandbox, eyiti o ṣe agbejade ibeere ti o baamu API iṣẹ naa Wandbox, ó sì rán an lọ. Idahun naa wa pẹlu ọna asopọ si apoti iyanrin ti o pari.

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

Ise agbese ita

Bayi jẹ ki a wo bi o ṣe le lo gbogbo eyi.

Apejọ

Ilé iṣẹ akanṣe yii, bii eyikeyi iṣẹ akanṣe miiran lori eto kikọ CMake, ni awọn ipele meji:

Iran

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

Ti aṣẹ ti o wa loke ko ba ṣiṣẹ nitori ẹya atijọ ti CMake, gbiyanju yiyọ kuro -S:

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

Diẹ ẹ sii nipa awọn aṣayan.

Ilé ise agbese

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

Diẹ ẹ sii nipa awọn ibi-afẹde apejọ.

Awọn aṣayan

MYLIB_COVERAGE

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

Pẹlu afojusun coverage, pẹlu eyiti o le bẹrẹ wiwọn koodu agbegbe nipasẹ awọn idanwo.

MYLIB_TESTING

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

Pese agbara lati mu kikọ idanwo ẹyọ kuro ati ibi-afẹde check. Bi abajade, wiwọn koodu agbegbe nipasẹ awọn idanwo ti wa ni pipa (wo. MYLIB_COVERAGE).

Idanwo tun jẹ alaabo laifọwọyi ti iṣẹ akanṣe ba ti sopọ si iṣẹ akanṣe miiran bi iṣẹ akanṣe nipa lilo aṣẹ naa add_subdirectory.

MYLIB_DOXYGEN_LANGUAGE

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

Yipada ede ti iwe-ipamọ ti ibi-afẹde n gbejade doc si eyi ti a fifun. Fun atokọ ti awọn ede ti o wa, wo Oju opo wẹẹbu eto Doxygen.

Russian ṣiṣẹ nipasẹ aiyipada.

Apejọ fojusi

Nipa aiyipada

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

Ti a ko ba sọ ibi-afẹde naa (eyiti o jẹ deede si ibi-afẹde naa all), gba ohun gbogbo ti o le, ati ki o tun pe awọn afojusun check.

mylib-kuro-igbeyewo

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

Ṣe akopọ awọn idanwo ẹyọkan. Ṣiṣẹ nipasẹ aiyipada.

ṣayẹwo

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

Ṣiṣe awọn idanwo kuro (ti kojọpọ, ti ko ba si tẹlẹ). Ṣiṣẹ nipasẹ aiyipada.

Wo tun mylib-unit-tests.

agbegbe

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

Ṣe itupalẹ ṣiṣiṣẹ (ṣiṣe, ti ko ba si tẹlẹ) awọn idanwo ẹyọkan fun agbegbe koodu nipasẹ awọn idanwo nipa lilo eto naa gcovr.

Eefi ti a bo yoo wo nkan bi eyi:

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

Ibi-afẹde wa nikan nigbati aṣayan ba ṣiṣẹ MYLIB_COVERAGE.

Wo tun check.

doc

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

Bẹrẹ ipilẹṣẹ ti awọn iwe koodu nipa lilo eto naa Atẹgun.

apoti

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

Idahun lati ọdọ iṣẹ naa dabi iru eyi:

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

Iṣẹ naa ni a lo fun eyi Wandbox. Emi ko mọ bi awọn olupin wọn ṣe rọ, ṣugbọn Mo ro pe anfani yii ko yẹ ki o jẹ ilokulo.

Awọn apẹẹrẹ

Kọ iṣẹ akanṣe ni ipo yokokoro pẹlu wiwọn agbegbe

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

Fifi sori ẹrọ iṣẹ akanṣe laisi apejọ alakoko ati idanwo

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

Kọ ni ipo idasilẹ pẹlu alakojọ ti a fun

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

Ti ipilẹṣẹ iwe ni English

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

Awọn irin-iṣẹ

  1. CMake 3.13

    Ni otitọ, ẹya CMake 3.13 nikan ni a nilo lati ṣiṣẹ diẹ ninu awọn aṣẹ console ti a ṣalaye ninu iranlọwọ yii. Lati oju-ọna ti sintasi ti awọn iwe afọwọkọ CMake, ẹya 3.8 ti to ti a ba pe iran ni awọn ọna miiran.

  2. Idanwo ìkàwé dokita

    Idanwo le jẹ alaabo (wo опцию MYLIB_TESTING).

  3. Atẹgun

    Lati yipada ede ninu eyiti iwe yoo ṣe ipilẹṣẹ, a pese aṣayan kan MYLIB_DOXYGEN_LANGUAGE.

  4. Onitumọ ede Python 3

    Fun laifọwọyi iran online sandboxes.

Ayẹwo aimi

Pẹlu CMake ati tọkọtaya awọn irinṣẹ to dara, o le pese itupalẹ aimi pẹlu ipa diẹ.

Cppcheck

CMake ni atilẹyin ti a ṣe sinu fun ohun elo itupalẹ aimi Cppcheck.

Lati ṣe eyi o nilo lati lo aṣayan CMAKE_CXX_CPPCHECK:

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

Lẹhin eyi, itupalẹ aimi yoo ṣe ifilọlẹ laifọwọyi ni gbogbo igba ti orisun naa ba ti ṣajọ ati ṣajọpọ. Ko si ye lati ṣe ohunkohun afikun.

idile

Pẹlu iranlọwọ ti ohun elo iyanu kan scan-build O tun le ṣiṣe itupalẹ aimi ni akoko kankan:

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

Nibi, ko dabi ọran pẹlu Cppcheck, o nilo lati ṣiṣe kikọ ni gbogbo igba nipasẹ scan-build.

Lẹhin Ọrọ

CMake jẹ eto ti o lagbara pupọ ati irọrun ti o fun ọ laaye lati ṣe iṣẹ ṣiṣe fun gbogbo itọwo ati awọ. Ati, biotilejepe awọn sintasi ma fi oju Elo lati wa ni fẹ, awọn Bìlísì jẹ ṣi ko bi ẹru bi o ti ya. Lo eto Kọ CMake fun anfani ti awujọ ati ilera.

Download ise agbese awoṣe

orisun: www.habr.com

Fi ọrọìwòye kun