සංවර්ධනය අතරතුර, මම සම්පාදක වෙනස් කිරීමට, මාතයන් ගොඩනැගීමට, පරායත්ත අනුවාද කිරීමට, ස්ථිතික විශ්ලේෂණය කිරීමට, කාර්ය සාධනය මැනීමට, ආවරණය එකතු කිරීමට, ලේඛන උත්පාදනය කිරීමට යනාදියට කැමතියි. ඒ වගේම මම CMake වලට ඇත්තටම කැමතියි මොකද මට අවශ්ය හැම දෙයක්ම කරන්න ඒකෙන් ඉඩ දෙනවා.
බොහෝ අය CMake විවේචනය කරන අතර බොහෝ විට එය සුදුසු ය, නමුත් ඔබ එය දෙස බැලුවහොත්, සියල්ල එතරම් නරක නැත, සහ මෑතකදී නරක නැහැ, සහ සංවර්ධනයේ දිශාව බෙහෙවින් ධනාත්මක ය.
මෙම සටහනේදී, පහත ක්රියාකාරීත්වය ලබා ගැනීම සඳහා CMake පද්ධතියේ C++ හි ශීර්ෂ පුස්තකාලයක් සරලව සංවිධානය කරන්නේ කෙසේදැයි මට ඔබට පැවසීමට අවශ්යය:
- එකලස් කිරීම;
- ස්වයංක්රීය පරීක්ෂණ;
- කේත ආවරණ මැනීම;
- ස්ථාපන;
- ස්වයං-ලේඛනගත කිරීම;
- මාර්ගගත වැලිපිල්ල උත්පාදනය;
- ස්ථිතික විශ්ලේෂණය.
වාසි සහ C-make දැනටමත් තේරුම් ගෙන ඇති ඕනෑම කෙනෙකුට සරලව කළ හැකිය
ව්යාපෘති අච්චුව බාගන්න සහ එය භාවිතා කිරීමට පටන් ගන්න.
අන්තර්ගතය
ඇතුළත සිට ව්යාපෘතිය පිටත ව්යාපෘතිය මෙවලම් ස්ථිතික විශ්ලේෂණය පසු පදය
ඇතුළත සිට ව්යාපෘතිය
ව්යාපෘති ව්යුහය
.
├── 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
අපි ප්රධාන වශයෙන් CMake scripts සංවිධානය කරන්නේ කෙසේද යන්න ගැන කතා කරමු, එබැවින් ඒවා විස්තරාත්මකව සාකච්ඡා කරනු ඇත. ඕනෑම කෙනෙකුට ඉතිරි ගොනු කෙලින්ම බැලිය හැක
ප්රධාන CMake ගොනුව (./CMakeLists.txt)
ව්යාපෘති තොරතුරු
පළමුවෙන්ම, ඔබ CMake පද්ධතියේ අපේක්ෂිත අනුවාදය ඉල්ලා සිටිය යුතුය. CMake පරිණාමය වෙමින් පවතී, විවිධ තත්වයන් තුළ විධාන අත්සන් සහ හැසිරීම වෙනස් වේ. CMake එකෙන් අපට අවශ්ය දේ වහාම තේරුම් ගැනීමට නම්, අපි ඒ සඳහා අපගේ අවශ්යතා වහාම සටහන් කළ යුතුය.
cmake_minimum_required(VERSION 3.13)
එවිට අපි අපගේ ව්යාපෘතිය, එහි නම, අනුවාදය, භාවිතා කරන භාෂා යනාදිය නම් කරන්නෙමු (බලන්න. команду project
මෙම අවස්ථාවේදී, අපි භාෂාව සඳහන් කරමු CXX
(සහ මෙහි තේරුම C++) එවිට CMake වෙහෙසට පත් නොවී C භාෂා සම්පාදකයක් සෙවීමට (පෙරනිමියෙන්, CMake හි භාෂා දෙකක් ඇතුළත් වේ: C සහ C++).
project(Mylib VERSION 1.0 LANGUAGES CXX)
අපගේ ව්යාපෘතිය උප ව්යාපෘතියක් ලෙස වෙනත් ව්යාපෘතියකට ඇතුළත් කර ඇත්ද යන්න මෙහිදී ඔබට වහාම පරීක්ෂා කළ හැකිය. මෙය අනාගතයේදී බොහෝ උපකාර වනු ඇත.
get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY)
ව්යාපෘති විකල්ප
අපි විකල්ප දෙකක් ලබා දෙන්නෙමු.
පළමු විකල්පය වේ MYLIB_TESTING
option(MYLIB_TESTING "Включить модульное тестирование" ON)
ඊට අමතරව, අපි වෙනම විකල්පයක් කරන්නෙමු MYLIB_COVERAGE
option(MYLIB_COVERAGE "Включить измерение покрытия кода тестами" OFF)
සම්පාදන විකල්ප
ඇත්ත වශයෙන්ම, අපි සිසිල් ප්ලස් ක්රමලේඛකයින් වන අතර, එබැවින් අපට සම්පාදකයෙන් උපරිම මට්ටමේ සම්පාදන-කාල රෝග විනිශ්චය අවශ්ය වේ. එක මීයෙක්වත් ලිස්සා නොයනු ඇත.
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
)
අපි C++ භාෂා ප්රමිතියට සම්පූර්ණයෙන්ම අනුකූල වීම සඳහා දිගු අක්රිය කරන්නෙමු. CMake හි පෙරනිමියෙන් ඒවා සක්රීය කර ඇත.
if(NOT CMAKE_CXX_EXTENSIONS)
set(CMAKE_CXX_EXTENSIONS OFF)
endif()
මූලික අරමුණ
අපගේ පුස්තකාලය සමන්විත වන්නේ ශීර්ෂ ගොනු වලින් පමණි, එයින් අදහස් වන්නේ අපට ස්ථිතික හෝ ගතික පුස්තකාල ස්වරූපයෙන් පිටාර ගැලීමක් නොමැති බවයි. අනෙක් අතට, අපගේ පුස්තකාලය බාහිරව භාවිතා කිරීම සඳහා, එය ස්ථාපනය කිරීම අවශ්ය වේ, එය පද්ධතිය තුළ හඳුනාගත හැකි අතර ඔබේ ව්යාපෘතියට සම්බන්ධ කළ යුතු අතර, ඒ සමඟම මෙම ශීර්ෂයන් මෙන්ම සමහර අමතර ඒවා ද තිබිය යුතුය. එහි ගුණාංගවලට අනුයුක්ත කර ඇත.
මේ සඳහා අපි අතුරු මුහුණත් පුස්තකාලයක් නිර්මාණය කරමු.
add_library(mylib INTERFACE)
අපි අපගේ අතුරු මුහුණත් පුස්තකාලයට ශීර්ෂ බැඳ ගනිමු.
CMake හි නවීන, විලාසිතාමය, තාරුණ්ය භාවිතය ශීර්ෂයන්, ගුණාංග ආදිය අදහස් කරයි. එක් ඉලක්කයක් හරහා සම්ප්රේෂණය වේ. එසේ පැවසීම ප්රමාණවත්ය target_link_libraries(target PRIVATE dependency)
dependency
, ඉලක්කයට අයත් මූලාශ්ර සඳහා ලබා ගත හැකි වනු ඇත target
. සහ ඔබට කිසිවක් අවශ්ය නැත [target_]include_directories
. මෙය විශ්ලේෂණයේ දී පහත දැක්වෙනු ඇත
ඊනියා කෙරෙහි අවධානය යොමු කිරීම ද වටී. выражения-генераторы: $<...>
මෙම විධානය අපගේ අතුරු මුහුණත් පුස්තකාලය සමඟ අපට අවශ්ය ශීර්ෂයන් සම්බන්ධ කරන අතර, අපගේ පුස්තකාලය එම CMake ධුරාවලිය තුළම කිසියම් ඉලක්කයකට සම්බන්ධ කර ඇත්නම්, නාමාවලියෙහි ඇති ශීර්ෂයන් ඒ හා සම්බන්ධ වේ. ${CMAKE_CURRENT_SOURCE_DIR}/include
, සහ අපගේ පුස්තකාලය පද්ධතිය මත ස්ථාපනය කර ඇත්නම් සහ විධානය භාවිතයෙන් වෙනත් ව්යාපෘතියකට සම්බන්ධ කර තිබේ නම් find_package
include
ස්ථාපන නාමාවලියට සාපේක්ෂව.
target_include_directories(mylib INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
භාෂා ප්රමිතියක් සකස් කරමු. ඇත්ත වශයෙන්ම, අන්තිම එක. ඒ අතරම, අපි ප්රමිතිය ඇතුළත් කරනවා පමණක් නොව, අපගේ පුස්තකාලය භාවිතා කරන අයටද එය ලබා දෙන්නෙමු. මෙය සාක්ෂාත් කරගනු ලබන්නේ කට්ටල දේපලෙහි කාණ්ඩයක් ඇති බැවිනි INTERFACE
(බලන්න
target_compile_features(mylib INTERFACE cxx_std_17)
අපි අපේ පුස්තකාලයට අන්වර්ථයක් හදමු. එපමණක් නොව, අලංකාරය සඳහා, එය විශේෂ "නාම අවකාශයක්" වනු ඇත. අපගේ පුස්තකාලයේ විවිධ මොඩියුල දිස්වන විට මෙය ප්රයෝජනවත් වනු ඇත, අපි ඒවා එකිනෙකට ස්වාධීනව සම්බන්ධ කිරීමට යමු.
add_library(Mylib::mylib ALIAS mylib)
ස්ථාපනය
අපගේ ශීර්ෂ පද්ධතියට ස්ථාපනය කිරීම. මෙහි සෑම දෙයක්ම සරලයි. සියලුම ශීර්ෂයන් සහිත ෆෝල්ඩරය නාමාවලියට යා යුතු බව අපි කියමු include
ස්ථාපන ස්ථානයට සාපේක්ෂව.
install(DIRECTORY include/mylib DESTINATION include)
ඊළඟට, අපි තුන්වන පාර්ශ්ව ව්යාපෘතිවල විධානය ඇමතීමට අවශ්ය බව අපි ගොඩනැගීමේ පද්ධතියට දන්වන්නෙමු find_package(Mylib)
සහ ඉලක්කයක් ලබා ගන්න Mylib::mylib
.
install(TARGETS mylib EXPORT MylibConfig)
install(EXPORT MylibConfig NAMESPACE Mylib:: DESTINATION share/Mylib/cmake)
මීළඟ මන්ත්රය මෙසේ තේරුම් ගත යුතුය. තෙවන පාර්ශවීය ව්යාපෘතියකදී අපි විධානය අමතන්නෙමු find_package(Mylib 1.2.3 REQUIRED)
, සහ ස්ථාපිත පුස්තකාලයේ සැබෑ අනුවාදය අනුවාදය සමඟ නොගැලපේ 1.2.3
CMake ස්වයංක්රීයව දෝෂයක් ජනනය කරයි. එනම්, ඔබට අනුවාද අතින් නිරීක්ෂණය කිරීමට අවශ්ය නොවනු ඇත.
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)
පරීක්ෂණ
පරීක්ෂණ අක්රිය කර ඇත්නම් එය පැහැදිලිව භාවිතා කරයි add_subdirectory
if(NOT MYLIB_TESTING)
message(STATUS "Тестирование проекта Mylib выключено")
elseif(IS_SUBPROJECT)
message(STATUS "Mylib не тестируется в режиме подмодуля")
else()
add_subdirectory(test)
endif()
ප්රලේඛනය
උප ව්යාපෘතියක් සම්බන්ධයෙන් ප්රලේඛනය ද උත්පාදනය නොකෙරේ.
if(NOT IS_SUBPROJECT)
add_subdirectory(doc)
endif()
මාර්ගගත වැලිපිල්ල
එලෙසම, උප ව්යාපෘතියට සබැඳි වැලිපිල්ලක් ද නැත.
if(NOT IS_SUBPROJECT)
add_subdirectory(online)
endif()
පරීක්ෂණ පිටපත (test/CMakeLists.txt)
පරීක්ෂා කිරීම
පළමුවෙන්ම, අපි අවශ්ය පරීක්ෂණ රාමුව සහිත පැකේජයක් සොයා ගනිමු (ඔබේ ප්රියතම එකක් සමඟ ප්රතිස්ථාපනය කරන්න).
find_package(doctest 2.3.3 REQUIRED)
අපි අපගේ ක්රියාත්මක කළ හැකි ගොනුව පරීක්ෂණ සමඟ නිර්මාණය කරමු. සාමාන්යයෙන් මම ක්රියාත්මක කළ හැකි ද්විමය වෙත කෙලින්ම එකතු කරන්නේ ශ්රිතය අඩංගු ගොනුව පමණි main
.
add_executable(mylib-unit-tests test_main.cpp)
තවද මම පරීක්ෂණ පසුව විස්තර කරන ගොනු එකතු කරමි. නමුත් ඔබ මෙය කළ යුතු නැත.
target_sources(mylib-unit-tests PRIVATE mylib/myfeature.cpp)
අපි පරායත්තතා සම්බන්ධ කරමු. අපි අපගේ ද්විමය වෙත අපට අවශ්ය CMake ඉලක්ක පමණක් සම්බන්ධ කළ අතර විධානය ඇමතීමට නොගත් බව කරුණාවෙන් සලකන්න target_include_directories
. පරීක්ෂණ රාමුවෙන් සහ අපගේ ශීර්ෂයන් Mylib::mylib
, මෙන්ම ගොඩනැගීමේ පරාමිතීන් (අපගේ නඩුවේදී, මෙය C++ භාෂා ප්රමිතියයි) මෙම ඉලක්ක සමඟින් පැමිණියා.
target_link_libraries(mylib-unit-tests
PRIVATE
Mylib::mylib
doctest::doctest
)
අවසාන වශයෙන්, අපි ව්යාජ ඉලක්කයක් සාදන්නෙමු, එහි “ගොඩනැගීම” ධාවන පරීක්ෂණවලට සමාන වන අතර, මෙම ඉලක්කය පෙරනිමි ගොඩනැගීමට එක් කරන්න (මේ සඳහා ගුණාංගය වගකිව යුතුය. ALL
) මෙයින් අදහස් කරන්නේ පෙරනිමි ගොඩනැගීම පරීක්ෂණ ක්රියාත්මක කිරීමට පොළඹවන බවයි, එයින් අදහස් කරන්නේ ඒවා ක්රියාත්මක කිරීමට අපට කිසිදා අමතක නොවන බවයි.
add_custom_target(check ALL COMMAND mylib-unit-tests)
Покрытие
ඊළඟට, සුදුසු විකල්පය සඳහන් කර ඇත්නම් අපි කේත ආවරණ මැනීම සක්රිය කරමු. මම විස්තර වලට නොයමි, මන්ද ඒවා CMake වලට වඩා ආවරණය මැනීමේ මෙවලමකට සම්බන්ධ වේ. ප්රතිඵල මත පදනම්ව ඉලක්කයක් නිර්මාණය වනු ඇති බව පමණක් සැලකිල්ලට ගැනීම වැදගත්ය 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()
ලේඛන සඳහා ස්ක්රිප්ට් (doc/CMakeLists.txt)
find_package(Doxygen)
ඊළඟට, පරිශීලකයා භාෂා විචල්යය සකසා ඇත්දැයි අපි පරීක්ෂා කරමු. ඔව් නම්, අපි එය ස්පර්ශ නොකරන්නෙමු, එසේ නොවේ නම්, අපි රුසියානු භාෂාව ගනිමු. ඉන්පසු අපි ඩොක්සිජන් පද්ධති ගොනු වින්යාස කරමු. වින්යාස කිරීමේ ක්රියාවලියේදී භාෂාව ඇතුළුව අවශ්ය සියලුම විචල්යයන් එහි යයි (බලන්න. команду configure_file
එවිට අපි ඉලක්කයක් නිර්මාණය කරමු 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 ()
සබැඳි වැලිපිල්ල සඳහා ස්ක්රිප්ට් (online/CMakeLists.txt)
මෙන්න අපි තුන්වන පයිතන් සොයාගෙන ඉලක්කයක් නිර්මාණය කරමු 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()
පිටත ව්යාපෘතිය
දැන් අපි බලමු මේ සියල්ල භාවිතා කරන්නේ කෙසේද කියා.
සභාව
CMake ගොඩනැගීමේ පද්ධතියේ වෙනත් ඕනෑම ව්යාපෘතියක් මෙන් මෙම ව්යාපෘතිය ගොඩනැගීම අදියර දෙකකින් සමන්විත වේ:
පරම්පරාව
cmake -S путь/к/исходникам -B путь/к/сборочной/директории [опции ...]
CMake හි පැරණි අනුවාදයක් හේතුවෙන් ඉහත විධානය ක්රියා නොකළේ නම්, මඟ හැරීමට උත්සාහ කරන්න
-S
:cmake путь/к/исходникам -B путь/к/сборочной/директории [опции ...]
ව්යාපෘතිය ගොඩනැගීම
cmake --build путь/к/сборочной/директории [--target target]
විකල්ප
MYLIB_COVERAGE
cmake -S ... -B ... -DMYLIB_COVERAGE=ON [прочие опции ...]
ඉලක්කය ඇතුළත් වේ coverage
MYLIB_TESTING
cmake -S ... -B ... -DMYLIB_TESTING=OFF [прочие опции ...]
ඒකක පරීක්ෂණ ගොඩනැගීම සහ ඉලක්කය අක්රීය කිරීමේ හැකියාව සපයයි check
MYLIB_COVERAGE
විධානය භාවිතා කරමින් උප ව්යාපෘතියක් ලෙස ව්යාපෘතිය වෙනත් ව්යාපෘතියකට සම්බන්ධ කර ඇත්නම් පරීක්ෂා කිරීම ස්වයංක්රීයව අක්රිය වේ add_subdirectory
MYLIB_DOXYGEN_LANGUAGE
cmake -S ... -B ... -DMYLIB_DOXYGEN_LANGUAGE=English [прочие опции ...]
ඉලක්කය උත්පාදනය කරන ලියකියවිලි භාෂාව මාරු කරයි doc
රුසියානු පෙරනිමියෙන් සක්රිය කර ඇත.
එකලස් කිරීමේ ඉලක්ක
පෙරනිමියෙන්
cmake --build path/to/build/directory
cmake --build path/to/build/directory --target all
ඉලක්කය නිශ්චිතව දක්වා නොමැති නම් (එය ඉලක්කයට සමාන වේ all
), හැකි සෑම දෙයක්ම එකතු කරයි, එසේම ඉලක්කය අමතන්න check
mylib-ඒකක-පරීක්ෂණ
cmake --build path/to/build/directory --target mylib-unit-tests
ඒකක පරීක්ෂණ සම්පාදනය කරයි. පෙරනිමියෙන් සක්රිය කර ඇත.
චෙක්පත
cmake --build путь/к/сборочной/директории --target check
එකතු කරන ලද (එකතු කරන ලද, දැනටමත් නොවේ නම්) ඒකක පරීක්ෂණ ධාවනය කරයි. පෙරනිමියෙන් සක්රිය කර ඇත.
මෙයද බලන්න mylib-unit-tests
ආවරණය
cmake --build путь/к/сборочной/директории --target coverage
වැඩසටහන භාවිතයෙන් පරීක්ෂණ මගින් කේත ආවරණය සඳහා ඒකක පරීක්ෂණ ධාවනය (ධාවනය, දැනටමත් නොවේ නම්) විශ්ලේෂණය කරයි
ආලේපන පිටාරය මේ වගේ දෙයක් පෙනෙනු ඇත:
------------------------------------------------------------------------------
GCC Code Coverage Report
Directory: /path/to/cmakecpptemplate/include/
------------------------------------------------------------------------------
File Lines Exec Cover Missing
------------------------------------------------------------------------------
mylib/myfeature.hpp 2 2 100%
------------------------------------------------------------------------------
TOTAL 2 2 100%
------------------------------------------------------------------------------
ඉලක්කය ලබා ගත හැක්කේ විකල්පය සක්රීය කළ විට පමණි MYLIB_COVERAGE
මෙයද බලන්න check
ඩී
cmake --build путь/к/сборочной/директории --target doc
පද්ධතිය භාවිතයෙන් කේත ලේඛන උත්පාදනය ආරම්භ කරයි
wandbox
cmake --build путь/к/сборочной/директории --target wandbox
සේවාවෙන් ලැබෙන ප්රතිචාරය මේ වගේ දෙයක් පෙනේ:
{
"permlink" : "QElvxuMzHgL9fqci",
"status" : "0",
"url" : "https://wandbox.org/permlink/QElvxuMzHgL9fqci"
}
සේවාව මේ සඳහා භාවිතා වේ
උදාහරණ
ආවරණ මැනීම සමඟ දෝශ නිරාකරණ ආකාරයෙන් ව්යාපෘතිය ගොඩනඟන්න
cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Debug -DMYLIB_COVERAGE=ON
cmake --build путь/к/сборочной/директории --target coverage --parallel 16
මූලික එකලස් කිරීම සහ පරීක්ෂා කිරීමකින් තොරව ව්යාපෘතියක් ස්ථාපනය කිරීම
cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DMYLIB_TESTING=OFF -DCMAKE_INSTALL_PREFIX=путь/к/установойной/директории
cmake --build путь/к/сборочной/директории --target install
ලබා දී ඇති සම්පාදකයක් සමඟ මුදා හැරීමේ මාදිලියේ සාදන්න
cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=g++-8 -DCMAKE_PREFIX_PATH=путь/к/директории/куда/установлены/зависимости
cmake --build путь/к/сборочной/директории --parallel 4
ඉංග්රීසියෙන් ලියකියවිලි උත්පාදනය කිරීම
cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Release -DMYLIB_DOXYGEN_LANGUAGE=English
cmake --build путь/к/сборочной/директории --target doc
මෙවලම්
-
CMake 3.13ඇත්ත වශයෙන්ම, CMake අනුවාදය 3.13 අවශ්ය වන්නේ මෙම උදව්වේ විස්තර කර ඇති සමහර කොන්සෝල විධාන ක්රියාත්මක කිරීමට පමණි. CMake ස්ක්රිප්ට් වල වාක්ය ඛණ්ඩයේ දෘෂ්ටිකෝණයෙන්, වෙනත් ආකාරවලින් උත්පාදනය හැඳින්වුවහොත් 3.8 අනුවාදය ප්රමාණවත් වේ.
-
පරීක්ෂණ පුස්තකාලය
doctest පරීක්ෂා කිරීම අබල කළ හැක (බලන්න
).опцию MYLIB_TESTING
-
ලේඛන උත්පාදනය කරනු ලබන භාෂාව මාරු කිරීමට, විකල්පයක් සපයනු ලැබේ
.MYLIB_DOXYGEN_LANGUAGE
-
භාෂා පරිවර්තක
Python 3 ස්වයංක්රීය උත්පාදනය සඳහා
මාර්ගගත වැලි පෙට්ටි .
ස්ථිතික විශ්ලේෂණය
CMake සහ හොඳ මෙවලම් කිහිපයක් සමඟ, ඔබට අවම උත්සාහයකින් ස්ථිතික විශ්ලේෂණයක් සැපයිය හැකිය.
Cppcheck
CMake සතුව ස්ථිතික විශ්ලේෂණ මෙවලමක් සඳහා සහය ඇත
මෙය සිදු කිරීම සඳහා ඔබ විකල්පය භාවිතා කළ යුතුය CMAKE_CXX_CPPCHECK
cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_CPPCHECK="cppcheck;--enable=all;-Iпуть/к/исходникам/include"
මෙයින් පසු, මූලාශ්රය සම්පාදනය කර නැවත සම්පාදනය කරන සෑම අවස්ථාවකම ස්ථිතික විශ්ලේෂණය ස්වයංක්රීයව දියත් කෙරේ. අමතර දෙයක් කිරීමට අවශ්ය නැත.
ක්ලැන්ග්
පුදුම මෙවලමක් ආධාරයෙන් scan-build
scan-build cmake -S путь/к/исходникам -B путь/к/сборочной/директории -DCMAKE_BUILD_TYPE=Debug
scan-build cmake --build путь/к/сборочной/директории
මෙන්න, Cppcheck සමඟ ඇති නඩුව මෙන් නොව, ඔබ සෑම විටම ගොඩනැගීම ධාවනය කළ යුතුය scan-build
.
පසු පදය
CMake යනු සෑම රසය සහ වර්ණය සඳහාම ක්රියාකාරිත්වය ක්රියාත්මක කිරීමට ඉඩ සලසන ඉතා ප්රබල සහ නම්යශීලී පද්ධතියකි. තවද, වාක්ය ඛණ්ඩය සමහර විට අපේක්ෂා කිරීමට බොහෝ දේ ඉතිරි කළද, යක්ෂයා තවමත් ඔහු පින්තාරු කර ඇති තරම් භයානක නොවේ. CMake ගොඩනැගීමේ ක්රමය සමාජයේ සහ සෞඛ්යයේ යහපත සඳහා භාවිතා කරන්න.
මූලාශ්රය: www.habr.com