เชตเชฟเชเชพเชธ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชฎเชจเซ เชเชฎเซเชชเชพเชเชฒเชฐ เชฌเชฆเชฒเชตเชพ, เชฌเชฟเชฒเซเชก เชฎเซเชกเซเชธ, เชกเชฟเชชเซเชจเซเชกเชจเซเชธเซ เชตเชฐเซเชเชจ, เชธเซเชเซเชเชฟเช เชเชจเชพเชฒเชฟเชธเชฟเชธ, เชชเชฐเชซเซเชฐเซเชฎเชจเซเชธ เชฎเชพเชชเชตเชพ, เชเชตเชฐเซเช เชเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพ, เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃ เชตเชเซเชฐเซ เชฌเชจเชพเชตเชตเชพเชจเซเช เชเชฎเซ เชเซ. เช เชจเซ เชนเซเช เชเชฐเซเชเชฐ CMake เชจเซ เชชเซเชฐเซเชฎ เชเชฐเซเช เชเซเช เชเชพเชฐเชฃ เชเซ เชคเซ เชฎเชจเซ เชเซ เชเซเชเช เชเซ เชคเซ เชเชฐเชตเชพ เชฆเซ เชเซ.
เชเชฃเชพ เชฒเซเชเซ เชธเซเชฎเซเชเชจเซ เชเซเชเชพ เชเชฐเซ เชเซ, เช เชจเซ เชเชฃเซ เชตเชพเชฐ เชคเซ เชฏเซเชเซเชฏ เชฐเซเชคเซ, เชชเชฐเชเชคเซ เชเซ เชคเชฎเซ เชคเซเชจเซ เชเซเช, เชคเซ เชฌเชงเซเช เชเชเชฒเซเช เชเชฐเชพเชฌ เชจเชฅเซ, เช เชจเซ เชคเชพเชเซเชคเชฐเชฎเชพเช เชฌเชฟเชฒเชเซเชฒ เชเชฐเชพเชฌ เชจเชฅเซ, เช เชจเซ เชตเชฟเชเชพเชธเชจเซ เชฆเชฟเชถเชพ เชคเชฆเซเชฆเชจ เชนเชเชพเชฐเชพเชคเซเชฎเช เชเซ.
เช เชจเซเชเชงเชฎเชพเช, เชนเซเช เชคเชฎเชจเซ เชเชฃเชพเชตเชตเชพ เชฎเชพเชเชเซ เชเซเช เชเซ เชจเซเชเซเชจเซ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชฎเซเชณเชตเชตเชพ เชฎเชพเชเซ เชธเซเชฎเซเช เชธเชฟเชธเซเชเชฎเชฎเชพเช C++ เชฎเชพเช เชนเซเชกเชฐ เชฒเชพเชเชฌเซเชฐเซเชฐเซ เชเซเชตเซ เชฐเซเชคเซ เชเซเช เชตเชตเซ:
- เชตเชฟเชงเชพเชจเชธเชญเชพ;
- เชเชเซเชฐเชจ เชชเชฐเซเชเซเชทเชฃเซ;
- เชเซเชก เชเชตเชฐเซเช เชฎเชพเชชเชจ;
- เชธเซเชฅเชพเชชเชจ;
- เชธเซเชตเชคเช-เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃ;
- เชเชจเชฒเชพเชเชจ เชธเซเชจเซเชกเชฌเซเชเซเชธ เชเชจเชฐเซเชถเชจ;
- เชธเซเชฅเชฟเชฐ เชตเชฟเชถเซเชฒเซเชทเชฃ.
เชเซเชเชชเชฃ เชเซ เชชเชนเซเชฒเชพเชฅเซ เช เชซเชพเชฏเชฆเชพ เช เชจเซ เชธเซ-เชฎเซเชเชจเซ เชธเชฎเชเซ เชเซ เชคเซ เชธเชฐเชณ เชฐเซเชคเซ เชเชฐเซ เชถเชเซ เชเซ
เชชเซเชฐเซเชเซเชเซเช เชเซเชฎเซเชชเชฒเซเช เชกเชพเชเชจเชฒเซเชก เชเชฐเซ เช เชจเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซ.
เช เชจเซเชเซเชฐเชฎเชฃเชฟเชเชพ
เช เชเชฆเชฐเชฅเซ เชชเซเชฐเซเชเซเชเซเช เชชเซเชฐเซเชเซเชเซเช เชฎเชพเชณเชเซเช เชฎเซเชเซเชฏ CMake เชซเชพเชเชฒ (./CMakeLists.txt) เชเซเชธเซเช เชธเซเชเซเชฐเชฟเชชเซเช (test/CMakeLists.txt) เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃ เชฎเชพเชเซเชจเซ เชธเซเชเซเชฐเชฟเชชเซเช (doc/CMakeLists.txt) เชเชจเชฒเชพเชเชจ เชธเซเชจเซเชกเชฌเซเชเซเชธ เชฎเชพเชเซ เชธเซเชเซเชฐเชฟเชชเซเช (online/CMakeLists.txt)
เชฌเชนเชพเชฐ เชชเซเชฐเซเชเซเชเซเช เชธเชพเชงเชจเซ เชธเซเชฅเชฟเชฐ เชตเชฟเชถเซเชฒเซเชทเชฃ เชเชเซเชเชพเชฐเชฃ
เช
เชเชฆเชฐเชฅเซ เชชเซเชฐเซเชเซเชเซเช
เชชเซเชฐเซเชเซเชเซเช เชฎเชพเชณเชเซเช
.
โโโ 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 เชซเชพเชเชฒ (./CMakeLists.txt)
เชชเซเชฐเซเชเซเชเซเช เชฎเชพเชนเชฟเชคเซ
เชธเซ เชชเซเชฐเชฅเชฎ, เชคเชฎเชพเชฐเซ เชธเซเชฎเซเช เชธเชฟเชธเซเชเชฎเชจเชพ เชเชตเชถเซเชฏเช เชธเชเชธเซเชเชฐเชฃเชจเซ เชตเชฟเชจเชเชคเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. 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)
เช เชฎเซ เชนเซเชกเชฐเซเชจเซ เช เชฎเชพเชฐเซ เชเชจเซเชเชฐเชซเซเชธ เชฒเชพเชเชฌเซเชฐเซเชฐเซเชฎเชพเช เชฌเชพเชเชงเซเช เชเซเช.
เชธเซเชฎเซเชเชจเซ เชเชงเซเชจเชฟเช, เชซเซเชถเชจเซเชฌเชฒ, เชฏเซเชตเชพ เชเชชเชฏเซเช เชธเซเชเชตเซ เชเซ เชเซ เชนเซเชกเชฐเซเชธ, เชชเซเชฐเซเชชเชฐเซเชเซเช เชตเชเซเชฐเซ. เชเช เช เชฒเชเซเชทเซเชฏ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชธเชพเชฐเชฟเชค. เชคเซเชฅเซ เชคเซ เชเชนเซเชตเซเช เชชเซเชฐเชคเซเช เชเซ 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)
เช
เชฎเซ เชจเชฟเชฐเซเชญเชฐเชคเชพเชจเซ เชเซเชกเซเช เชเซเช. เชฎเชนเซเชฐเชฌเชพเชจเซ เชเชฐเซเชจเซ เชจเซเชเชง เชเชฐเซ เชเซ เช
เชฎเซ เชซเชเซเชค เชธเซเชฎเซเช เชฒเชเซเชทเซเชฏเซเชจเซ เช
เชฎเชพเชฐเซ เชฌเชพเชเชจเชฐเซ เชธเชพเชฅเซ เชฒเชฟเชเช เชเชฐเซเชฏเชพ เชเซ เช
เชจเซ เชเชฆเซเชถเชจเซ เชเซเชฒ เชเชฐเซเชฏเซ เชจเชฅเซ 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()
เชฌเชนเชพเชฐ เชชเซเชฐเซเชเซเชเซเช
เชนเชตเซ เช เชฌเชงเชพเชจเซ เชเชชเชฏเซเช เชเซเชตเซ เชฐเซเชคเซ เชเชฐเชตเซ เชคเซ เชเซเชเช.
เชตเชฟเชงเชพเชจเชธเชญเชพ
เชธเซเชฎเซเช เชฌเชฟเชฒเซเชก เชธเชฟเชธเซเชเชฎ เชชเชฐเชจเชพ เชเซเชเชชเชฃ เช เชจเซเชฏ เชชเซเชฐเซเชเซเชเซเชเชจเซ เชเซเชฎ เช เชชเซเชฐเซเชเซเชเซเชเชจเซเช เชจเชฟเชฐเซเชฎเชพเชฃ, เชฌเซ เชคเชฌเชเซเชเชพเชเชจเซ เชธเชฎเชพเชตเซเชถ เชเชฐเซ เชเซ:
เชชเซrationเซ
cmake -S ะฟััั/ะบ/ะธัั
ะพะดะฝะธะบะฐะผ -B ะฟััั/ะบ/ัะฑะพัะพัะฝะพะน/ะดะธัะตะบัะพัะธะธ [ะพะฟัะธะธ ...]
เชเซ เชเชชเชฐเซเชเซเชค เชเชฆเซเชถ เชธเซเชฎเซเชเชจเชพ เชเซเชจเชพ เชธเชเชธเซเชเชฐเชฃเชจเซ เชเชพเชฐเชฃเซ เชเชพเชฎ เชเชฐเชคเซเช เชจเชฅเซ, เชคเซ เช เชตเชเชฃเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ เชเชฐเซ
-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
เชธเชฟเชธเซเชเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเซเชก เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃ เชฌเชจเชพเชตเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซ เชเซ
เชตเซเชจเซเชกเชฌเซเชเซเชธ
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 เชฎเชพเชคเซเชฐ เช เชฎเชฆเชฆเชฎเชพเช เชตเชฐเซเชฃเชตเซเชฒ เชเซเชเชฒเชพเช เชเชจเซเชธเซเชฒ เชเชฆเซเชถเซเชจเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชเซ. เชธเซเชฎเซเช เชธเซเชเซเชฐเชฟเชชเซเชเซเชธเชจเชพ เชตเชพเชเซเชฏเชฐเชเชจเชพเชจเชพเช เชฆเซเชทเซเชเชฟเชเซเชฃเชฅเซ, เชเซ เชเชจเชฐเซเชถเชจเชจเซ เช เชจเซเชฏ เชฐเซเชคเซ เชฌเซเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชคเซ เชเชตเซเชคเซเชคเชฟ 3.8 เชชเชฐเซเชฏเชพเชชเซเชค เชเซ.
-
เชชเชฐเซเชเซเชทเชฃ เชชเซเชธเซเชคเชเชพเชฒเชฏ
doctest เชชเชฐเซเชเซเชทเชฃ เช เชเซเชทเชฎ เชเชฐเซ เชถเชเชพเชฏ เชเซ (เชเซเช
).ะพะฟัะธั MYLIB_TESTING
-
เชเซ เชญเชพเชทเชพเชฎเชพเช เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃ เชเชจเชฐเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ เชคเซเชจเซ เชฌเชฆเชฒเชตเชพ เชฎเชพเชเซ, เชเช เชตเชฟเชเชฒเซเชช เชเชชเชตเชพเชฎเชพเช เชเชตเซ เชเซ
.MYLIB_DOXYGEN_LANGUAGE
-
เชญเชพเชทเชพ เชฆเซเชญเชพเชทเชฟเชฏเชพ
เชชเชพเชฏเชฅเซเชจ 3 เชเชชเซเชเชช เชเชจเชฐเซเชถเชจ เชฎเชพเชเซ
เชเชจเชฒเชพเชเชจ เชธเซเชจเซเชกเชฌเซเชเซเชธ .
เชธเซเชฅเชฟเชฐ เชตเชฟเชถเซเชฒเซเชทเชฃ
CMake เช เชจเซ เชเซเชเชฒเชพเช เชธเชพเชฐเชพ เชธเชพเชงเชจเซ เชธเชพเชฅเซ, เชคเชฎเซ เชจเซเชฏเซเชจเชคเชฎ เชชเซเชฐเชฏเชคเซเชจเซ เชธเชพเชฅเซ เชธเซเชฅเชฟเชฐ เชตเชฟเชถเซเชฒเซเชทเชฃ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชถเชเซ เชเซ.
เชธเซเชชเซเชชเซเชเซเช
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 เชเช เชเซเชฌ เช เชถเชเซเชคเชฟเชถเชพเชณเซ เช เชจเซ เชฒเชตเชเซเช เชธเชฟเชธเซเชเชฎ เชเซ เชเซ เชคเชฎเชจเซ เชฆเชฐเซเช เชธเซเชตเชพเชฆ เช เชจเซ เชฐเชเช เชฎเชพเชเซ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เช เชฎเชฒเชฎเชพเช เชฎเซเชเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ. เช เชจเซ, เชเซ เชเซ เชตเชพเชเซเชฏเชฐเชเชจเชพ เชเซเชฏเชพเชฐเซเช เชเชเซเชเชฟเชค เชฅเชตเชพ เชฎเชพเชเซ เชเชฃเซเช เชเซเชกเซ เชฆเซ เชเซ, เชถเซเชคเชพเชจ เชนเชเซ เชชเชฃ เชคเซเชเชฒเซ เชญเชฏเชเชเชฐ เชจเชฅเซ เชเซเชเชฒเซ เชคเซเชจเซ เชฆเซเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชเซ. เชธเชฎเชพเช เช เชจเซ เชเชฐเซเชเซเชฏเชจเชพ เชฒเชพเชญ เชฎเชพเชเซ เชธเซเชฎเซเช เชฌเชฟเชฒเซเชก เชธเชฟเชธเซเชเชฎเชจเซ เชเชชเชฏเซเช เชเชฐเซ.
โ
เชธเซเชฐเซเชธ: www.habr.com