ʻO CMake lāua ʻo C++ he mau kaikunāne mau loa

ʻO CMake lāua ʻo C++ he mau kaikunāne mau loa

I ka wā o ka hoʻomohala ʻana, makemake wau e hoʻololi i nā mea hoʻopili, kūkulu i nā ʻano, nā mana hilinaʻi, hana i ka nānā ʻana static, ana i ka hana, hōʻiliʻili i ka uhi, hana i nā palapala, etc. A makemake nui au iā CMake no ka mea hiki iaʻu ke hana i nā mea a pau aʻu e makemake ai.

He nui ka poʻe e hoʻohewa iā CMake, a pono pinepine, akā inā ʻoe e nānā iā ia, ʻaʻole maikaʻi loa nā mea āpau, a i kēia manawa. aole ino loa, a maikaʻi loa ke kuhikuhi o ka hoʻomohala ʻana.

Ma kēia memo, makemake wau e haʻi iā ʻoe pehea e hoʻonohonoho pono ai i kahi waihona poʻomanaʻo ma C ++ i ka ʻōnaehana CMake e kiʻi i kēia mau hana:

  1. Hui;
  2. Nā hoʻokolohua Autorun;
  3. Ana hoʻopili code;
  4. Hoʻokomo;
  5. Palapala-aunoa;
  6. Hoʻokumu ʻia ʻo Sandbox Online;
  7. ʻIkepili paʻa.

ʻO ka mea i hoʻomaopopo mua i nā pono a me C-make hiki ke maʻalahi download template papahana a hoʻomaka e hoʻohana.


Nā mea

  1. Papahana mai loko mai
    1. Papahana papahana
    2. Waihona CMake nui (./CMakeLists.txt)
      1. ʻIke papahana
      2. Koho Papahana
      3. Nā koho hōʻuluʻulu
      4. ʻO ka pahuhopu mua
      5. Kāu Mau Koho Paʻamau
      6. Nā ho'āʻo
      7. ʻO ka palapala
      8. Pahu one online
    3. Palapala hoʻāʻo (test/CMakeLists.txt)
      1. Hoʻoponopono
      2. ʻO ka uhiʻana
    4. Palapala no ka palapala (doc/CMakeLists.txt)
    5. Palapala no ka pahu one online (online/CMakeLists.txt)
  2. Pāhana ma waho
    1. Hōʻuluʻulu
      1. Kaʻaʻina
      2. Hōʻuluʻulu
    2. Nā koho
      1. MYLIB_COVERAGE
      2. MYLIB_TESTING
      3. MYLIB_DOXYGEN_LANGUAGE
    3. Nā pahuhopu hui
      1. ma ka paʻamau
      2. mylib-unit-tests
      3. huli
      4. ʻaoʻao pale
      5. doc
      6. pahu pahu
    4. examples
  3. Nā Mea Hana
  4. ʻIkepili paʻa
  5. Ma hope o ka'ōlelo

Papahana mai loko mai

Papahana papahana

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

E kamaʻilio nui mākou e pili ana i ka hoʻonohonoho ʻana i nā palapala CMake, no laila e kūkākūkā nui ʻia lākou. Hiki i kekahi ke nānā pololei i ke koena o nā faila ma ka ʻaoʻao papahana template.

Waihona CMake nui (./CMakeLists.txt)

ʻIke papahana

ʻO ka mea mua, pono ʻoe e noi i ka mana koi o ka ʻōnaehana CMake. Ke ulu nei ʻo CMake, ke hoʻololi nei nā pūlima kauoha a me nā ʻano i nā kūlana like ʻole. I mea e hoʻomaopopo koke ai ʻo CMake i kā mākou makemake mai ia mea, pono mākou e hoʻopaʻa koke i kā mākou mau koi no ia.

cmake_minimum_required(VERSION 3.13)

A laila e koho mākou i kā mākou papahana, kona inoa, ka mana, nā ʻōlelo i hoʻohana ʻia, a pēlā aku. команду project).

Ma kēia hihia, hōʻike mākou i ka ʻōlelo CXX (a ʻo ia hoʻi ʻo C++) i ʻole ʻo CMake e hoʻopaʻa a ʻimi i kahi mea hoʻopili ʻōlelo C (ma ka maʻamau, aia ʻelua ʻōlelo CMake: C a me C++).

project(Mylib VERSION 1.0 LANGUAGES CXX)

Maanei hiki iā ʻoe ke nānā koke inā ua hoʻokomo ʻia kā mākou papahana i kahi papahana ʻē aʻe ma ke ʻano he subproject. E kōkua nui kēia i ka wā e hiki mai ana.

get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)

Koho Papahana

E hāʻawi mākou i ʻelua koho.

ʻO ka koho mua MYLIB_TESTING - e hoʻopau i nā hoʻokolohua ʻāpana. Pono paha kēia inā maopopo mākou ua kūpono nā mea a pau me nā hoʻokolohua, akā makemake wale mākou, no ka laʻana, e hoʻokomo a hoʻopaʻa i kā mākou papahana. A i ʻole ua hoʻokomo ʻia kā mākou papahana ma ke ʻano he subproject - i kēia hihia, ʻaʻole makemake ka mea hoʻohana i kā mākou papahana i ka holo ʻana i kā mākou hoʻokolohua. ʻAʻole ʻoe e hoʻāʻo i nā hilinaʻi āu e hoʻohana ai, ʻeā?

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

Eia hou, e hana mākou i kahi koho kaʻawale MYLIB_COVERAGE no ke ana ʻana i ka uhi code e nā hoʻāʻo, akā pono ia i nā mea hana hou aʻe, no laila pono e ʻae ʻia.

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

Nā koho hōʻuluʻulu

ʻOiaʻiʻo, he mau mea hoʻolalelale a hauʻoli mākou, no laila makemake mākou i ka pae kiʻekiʻe o nā diagnostics compile-time mai ka compiler. ʻAʻole e paheʻe kekahi ʻiole.

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
)

E hoʻopau pū mākou i nā mea hoʻonui i mea e hoʻokō pono ai i ke kūlana ʻōlelo C++. Hoʻohana ʻia lākou ma ka paʻamau ma CMake.

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

ʻO ka pahuhopu mua

He waihona poʻomanaʻo wale nō kā mākou waihona, ʻo ia hoʻi, ʻaʻohe o mākou pau i ke ʻano o nā hale waihona puke paʻa a i ʻole nā ​​​​hale waihona puke. Ma ka lima ʻē aʻe, i mea e hoʻohana ai i kā mākou waihona ma waho, pono e hoʻokomo ʻia, pono e ʻike ʻia i loko o ka ʻōnaehana a pili i kāu papahana, a ma ka manawa like kēia mau poʻomanaʻo, a me kekahi mau mea hou aʻe. ua pili i na waiwai.

No kēia kumu, hana mākou i kahi waihona waihona.

add_library(mylib INTERFACE)

Hoʻopili mākou i nā poʻomanaʻo i kā mākou waihona kikowaena.

ʻO ka hoʻohana ʻana o CMake i kēia manawa, ʻano ʻōpio, nā poʻo, nā waiwai, etc. hoʻouna ʻia ma o ka pahuhopu hoʻokahi. No laila ua lawa ka ʻōlelo ʻana target_link_libraries(target PRIVATE dependency), a me nā poʻomanaʻo a pau e pili ana i ka pahu hopu dependency, e loaʻa no nā kumu no ka pahuhopu target. A ʻaʻole pono ʻoe i kekahi [target_]include_directories. E hōʻike ʻia kēia ma ka ʻikepili ma lalo nei ʻO ka palapala CMake no nā hoʻokolohua ʻāpana.

He mea pono no hoi ka noonoo ana i ka mea i kapaia. выражения-генераторы: $<...>.

Hoʻopili kēia kauoha i nā poʻomanaʻo e pono ai mākou me kā mākou waihona waihona, a inā pili kā mākou waihona i kekahi pahuhopu i loko o ka hierarchy CMake like, a laila e pili pū nā poʻo mai ka papa kuhikuhi me ia. ${CMAKE_CURRENT_SOURCE_DIR}/include, a inā hoʻokomo ʻia kā mākou waihona ma ka ʻōnaehana a pili i kahi papahana ʻē aʻe me ka hoʻohana ʻana i ke kauoha find_package, a laila e hoʻopili ʻia nā poʻomanaʻo mai ka papa kuhikuhi include pili i ka papa kuhikuhi hoʻonoho.

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

E hoʻonoho kākou i ka pae ʻōlelo. ʻOiaʻiʻo, ka mea hope loa. I ka manawa like, ʻaʻole mākou e hoʻokomo wale i ka maʻamau, akā hoʻonui pū i ka poʻe e hoʻohana i kā mākou waihona. Loaʻa kēia ma muli o ka loaʻa ʻana o ka waiwai i hoʻonohonoho ʻia he ʻāpana INTERFACE (e nānā i para. kauoha target_compile_features).

target_compile_features(mylib INTERFACE cxx_std_17)

E hana mākou i inoa inoa no kā mākou waihona. Eia kekahi, no ka nani, aia ia i kahi "namespace" kūikawā. Pono kēia i ka wā e ʻike ʻia ai nā modula like ʻole i loko o kā mākou waihona, a hele mākou e hoʻopili kūʻokoʻa iā lākou. E like me Busta, no ka laʻana.

add_library(Mylib::mylib ALIAS mylib)

Kāu Mau Koho Paʻamau

Ke kau ʻana i kā mākou mau poʻo i loko o ka ʻōnaehana. He mea maʻalahi nā mea a pau maʻaneʻi. 'Ōlelo mākou e hele ka waihona me nā poʻomanaʻo āpau i ka papa kuhikuhi include pili i kahi hoʻokomo.

install(DIRECTORY include/mylib DESTINATION include)

A laila, hōʻike mākou i ka ʻōnaehana kūkulu e makemake mākou e kāhea i ke kauoha i nā papahana ʻaoʻao ʻekolu find_package(Mylib) a loaʻa kahi pahuhopu Mylib::mylib.

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

Pono e hoʻomaopopo ʻia ka ʻōlelo aʻe ma kēia ʻano. I ka wā ma kahi papahana ʻaoʻao ʻekolu mākou e kāhea i ke kauoha find_package(Mylib 1.2.3 REQUIRED), a ʻaʻole kūpono ka mana maoli o ka waihona i hoʻokomo ʻia me ka mana 1.2.3E hoʻopuka aunoa ʻo CMake i kahi hewa. ʻO ia hoʻi, ʻaʻole pono ʻoe e hahai i nā mana me ka lima.

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)

Nā ho'āʻo

Inā paʻa nā hoʻokolohua me ka hoʻohana koho kūpono a i ʻole kā mākou papahana he subproject, ʻo ia hoʻi, pili ia i kahi papahana CMake e hoʻohana ana i ke kauoha add_subdirectory, ʻaʻole mākou e neʻe hou aku ma ka hierarchy, a ʻo ka palapala, e wehewehe ana i nā kauoha no ka hana ʻana a me ka holo ʻana i nā hoʻokolohua, ʻaʻole holo wale.

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

ʻO ka palapala

ʻAʻole e hana ʻia nā palapala i ka hihia o kahi papahana.

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

Pahu one online

Pēlā nō, ʻaʻole loaʻa i ka subproject kahi pahu one online.

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

Palapala hoʻāʻo (test/CMakeLists.txt)

Hoʻoponopono

ʻO ka mea mua, ʻike mākou i kahi pūʻolo me ka ʻōnaehana hoʻāʻo e koi ʻia (e hoʻololi me kāu mea punahele).

find_package(doctest 2.3.3 REQUIRED)

E hana mākou i kā mākou faila hiki ke hoʻokō me nā hoʻāʻo. Hoʻohui pinepine wau i ka binary executable wale nō ka faila e loaʻa ai ka hana main.

add_executable(mylib-unit-tests test_main.cpp)

A hoʻohui au i nā faila i wehewehe ʻia nā hoʻokolohua ma hope. Akā ʻaʻole pono ʻoe e hana pēlā.

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

Hoʻohui mākou i nā hilinaʻi. E ʻoluʻolu e hoʻopili mākou i nā pahuhopu CMake wale nō mākou e pono ai i kā mākou binary a ʻaʻole i kāhea i ke kauoha target_include_directories. Nā poʻomanaʻo mai ka papa hana hoʻāʻo a mai kā mākou Mylib::mylib, a me ke kūkulu ʻana i nā ʻāpana (i kā mākou hihia, ʻo ia ka maʻamau ʻōlelo C++) i hele pū me kēia mau pahuhopu.

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

ʻO ka hope, hana mākou i kahi pahuhopu dummy, ʻo ka "kūkulu" o ia mea e like me ka holo ʻana i nā hoʻokolohua, a hoʻohui i kēia pahuhopu i ka hale paʻamau (ʻo ke ʻano ke kuleana no kēia. ALL). ʻO kēia ke kumu o ka hana paʻamau e hoʻomaka i nā hoʻāʻo e holo, ʻo ia hoʻi, ʻaʻole loa mākou e poina e holo iā lākou.

add_custom_target(check ALL COMMAND mylib-unit-tests)

ʻO ka uhiʻana

A laila, hiki iā mākou ke ana i ka uhi ʻana o ke code inā ʻike ʻia ke koho kūpono. ʻAʻole wau e hele i nā kikoʻī, no ka mea pili lākou i kahi mea hana no ke ana ʻana i ka uhi ma mua o CMake. He mea nui wale nō e hoʻomaopopo ma muli o nā hopena e hana ʻia kahi pahuhopu coverage, me ka maʻalahi o ka hoʻomaka ʻana e ana i ka uhi.

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

Palapala no ka palapala (doc/CMakeLists.txt)

Loaʻa iā Doxygen.

find_package(Doxygen)

A laila, nānā mākou inā ua hoʻonohonoho ka mea hoʻohana i ka ʻōlelo hoʻololi. Inā ʻae, ʻaʻole mākou e hoʻopā iā ia, inā ʻaʻole, a laila lawe mākou i ka Lūkini. A laila hoʻonohonoho mākou i nā faila ʻōnaehana Doxygen. ʻO nā ʻano like ʻole a pau, me ka ʻōlelo, e hele i laila i ka wā o ke kaʻina hoʻonohonoho (ʻike. команду configure_file).

A laila hana mākou i kahi pahuhopu doc, e hoʻomaka ana e hana i nā palapala. No ka mea, ʻaʻole ʻo ka hoʻokumu ʻana i nā palapala ka mea e pono ai i ke kaʻina hana hoʻomohala, ʻaʻole hiki ke hoʻohana ʻia ka pahuhopu ma ka paʻamau; pono e hoʻokuʻu ʻia.

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

Palapala no ka pahu one online (online/CMakeLists.txt)

Maanei mākou e ʻike ai i ka Python ʻekolu a hana i kahi pahuhopu wandbox, ka mea e hoʻopuka i kahi noi e pili ana i ka API lawelawe Wadbox, a hookuu aku ia ia. Hiki mai ka pane me kahi loulou i ka pahu one i pau.

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

Pāhana ma waho

I kēia manawa, e nānā kākou pehea e hoʻohana ai i kēia mau mea a pau.

Hōʻuluʻulu

ʻO ke kūkulu ʻana i kēia papahana, e like me nā papahana ʻē aʻe ma ka ʻōnaehana kūkulu CMake, ʻelua mau pae:

Kaʻaʻina

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

Inā ʻaʻole i hana ke kauoha ma luna ma muli o kahi mana kahiko o CMake, e hoʻāʻo e haʻalele -S:

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

Nā mea hou aku e pili ana i nā koho.

Ke kūkulu ʻana i ka papahana

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

E pili ana i nā pahuhopu hui.

Nā koho

MYLIB_COVERAGE

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

Loaʻa i ka pahuhopu coverage, hiki iā ʻoe ke hoʻomaka e ana i ka uhi code ma o nā hoʻokolohua.

MYLIB_TESTING

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

Hāʻawi i ka hiki ke hoʻopau i ke kūkulu ʻana a me ka pahu hoʻāʻo ʻāpana check. ʻO ka hopena, ua hoʻopau ʻia ke ana o ka uhi code e nā hoʻāʻo (e ʻike. MYLIB_COVERAGE).

Hoʻopau ʻia ka hoʻāʻo ʻana inā pili ka papahana i kahi papahana ʻē aʻe ma ke ʻano he subproject me ka hoʻohana ʻana i ke kauoha add_subdirectory.

MYLIB_DOXYGEN_LANGUAGE

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

Hoʻololi i ka ʻōlelo o ka palapala i hoʻopuka ʻia e ka pahu hopu doc i ka mea i haawiia. No ka papa inoa o nā ʻōlelo i loaʻa, e ʻike ʻO ka pūnaewele pūnaewele Doxygen.

Hoʻohana ʻia ʻo Lūkini ma ka paʻamau.

Nā pahuhopu hui

ma ka paʻamau

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

Inā ʻaʻole i kuhikuhi ʻia ka pahuhopu (ʻo ia ka mea e like me ka pahuhopu all), hōʻiliʻili i nā mea a pau hiki iā ia, a kāhea pū i ka pahuhopu check.

mylib-unit-tests

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

Hoʻopili i nā hoʻokolohua ʻāpana. Hoʻohana ʻia e ka paʻamau.

huli

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

Holo i nā hoʻāʻo ʻāpana i hōʻiliʻili ʻia (i ʻohi ʻia, inā ʻaʻole). Hoʻohana ʻia e ka paʻamau.

E nānā hoʻi mylib-unit-tests.

ʻaoʻao pale

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

Nānā i ka holo (holo, inā ʻaʻole i kēia manawa) nā hoʻāʻo ʻāpana no ka uhi code ma o nā hoʻāʻo e hoʻohana ana i ka papahana gcovr.

E like me kēia ke ʻano o ka exhaust coating:

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

Loaʻa ka pahu hopu inā hiki ke koho MYLIB_COVERAGE.

E nānā hoʻi check.

doc

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

Hoʻomaka ka hana ʻana i nā palapala code me ka hoʻohana ʻana i ka ʻōnaehana ʻO oxygen.

pahu pahu

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

ʻO ka pane mai ka lawelawe e like me kēia:

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

Hoʻohana ʻia ka lawelawe no kēia Wadbox. ʻAʻole maopopo iaʻu i ka maʻalahi o kā lākou mau kikowaena, akā manaʻo wau ʻaʻole pono e hoʻomāinoino ʻia kēia manawa.

examples

E kūkulu i ka papahana ma ke ʻano debug me ke ana uhi

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

Ke hoʻouka ʻana i kahi papahana me ka ʻole o ka hui mua ʻana a me ka hoʻāʻo ʻana

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

Kūkulu ʻia ma ke ʻano hoʻokuʻu me kahi compiler i hāʻawi ʻia

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

Ke hana nei i nā palapala ma ka ʻōlelo Pelekania

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

Nā Mea Hana

  1. CMake 3.13

    ʻO ka ʻoiaʻiʻo, koi ʻia ka mana CMake 3.13 e holo i kekahi o nā kauoha console i wehewehe ʻia i kēia kōkua. Mai ka manaʻo o ka syntax o nā palapala CMake, lawa ka mana 3.8 inā kāhea ʻia ka hanauna ma nā ʻano ʻē aʻe.

  2. Hale waihona hoʻāʻo doctest

    Hiki ke hoʻopau ʻia ka hoʻāʻo ʻana (e nānā опцию MYLIB_TESTING).

  3. ʻO oxygen

    No ka hoʻololi ʻana i ka ʻōlelo e hana ʻia ai ka palapala, hāʻawi ʻia kahi koho MYLIB_DOXYGEN_LANGUAGE.

  4. Mea unuhi ʻōlelo Python 3

    No ka hana ʻakomi nā pahu one online.

ʻIkepili paʻa

Me CMake a me kekahi mau mea hana maikaʻi, hiki iā ʻoe ke hāʻawi i ka loiloi static me ka hoʻoikaika liʻiliʻi.

Cppcheck

Ua kākoʻo ʻia ʻo CMake no kahi mea hana loiloi static Cppcheck.

No ka hana ʻana i kēia pono ʻoe e hoʻohana i ke koho CMAKE_CXX_CPPCHECK:

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

Ma hope o kēia, e hoʻokuʻu ʻia ka loiloi static i kēlā me kēia manawa i hōʻuluʻulu ʻia a hoʻohui hou ʻia ke kumu. ʻAʻohe pono e hana i kekahi mea hou aku.

kani

Me ke kōkua o kahi mea hana kupanaha scan-build Hiki iā ʻoe ke holo i ka loiloi static i ka manawa:

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

Eia, ʻaʻole like me ka Cppcheck, pono ʻoe e holo i ke kūkulu ʻana i kēlā me kēia manawa scan-build.

Ma hope o ka'ōlelo

He ʻōnaehana ikaika a maʻalahi ʻo CMake e hiki ai iā ʻoe ke hoʻokō i nā hana no kēlā me kēia ʻono a me nā kala. A, ʻoiai ʻo ka syntax i kekahi manawa e waiho nui i ka makemake, ʻaʻole i weliweli ka diabolo e like me kona pena ʻia. E hoʻohana i ka ʻōnaehana kūkulu CMake no ka pono o ke kaiāulu a me ke olakino.

Hoʻoiho i ka laʻana papahana

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka