เจตเจฟเจเจพเจธ เจฆเฉ เจฆเฉเจฐเจพเจจ, เจฎเฉเจ เจเฉฐเจชเจพเจเจฒเจฐ เจจเฉเฉฐ เจฌเจฆเจฒเจฃเจพ, เจฎเฉเจก เจฌเจฃเจพเจเจฃเจพ, เจจเจฟเจฐเจญเจฐเจคเจพ เจธเฉฐเจธเจเจฐเจฃ เจเจฐเจจเจพ, เจธเจฅเจฟเจฐ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเจฐเจจเจพ, เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจจเฉเฉฐ เจฎเจพเจชเจฃเจพ, เจเจตเจฐเฉเจ เจเจเฉฑเจ เจพ เจเจฐเจจเจพ, เจฆเจธเจคเจพเจตเฉเจเจผ เจคเจฟเจเจฐ เจเจฐเจจเจพ, เจเจฆเจฟ เจเจฐเจจเจพ เจชเจธเฉฐเจฆ เจเจฐเจฆเจพ เจนเจพเจเฅค เจ เจคเฉ เจฎเฉเจ เจธเฉฑเจเจฎเฉเฉฑเจ เจธเฉเจฎเฉเจ เจจเฉเฉฐ เจชเจฟเจเจฐ เจเจฐเจฆเจพ เจนเจพเจ เจเจฟเจเจเจเจฟ เจเจน เจฎเฉเจจเฉเฉฐ เจเจน เจธเจญ เจเฉเจ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉ เจเฉ เจฎเฉเจ เจเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ.
เจฌเจนเฉเจค เจธเจพเจฐเฉ เจฒเฉเจ เจธเฉเจฎเฉเจ เจฆเฉ เจเจฒเฉเจเจจเจพ เจเจฐเจฆเฉ เจนเจจ, เจ เจคเฉ เจ เจเจธเจฐ เจเจธ เจคเจฐเฉเจนเจพเจ เจฆเฉ เจนเฉฑเจเจฆเจพเจฐ เจนเฉเฉฐเจฆเฉ เจนเจจ, เจชเจฐ เจเฉ เจคเฉเจธเฉเจ เจเจธ เจจเฉเฉฐ เจฆเฉเจเจฆเฉ เจนเฉ, เจคเจพเจ เจธเจญ เจเฉเจ เจเฉฐเจจเจพ เจฌเฉเจฐเจพ เจจเจนเฉเจ เจนเฉ, เจ เจคเฉ เจนเจพเจฒ เจนเฉ เจตเจฟเฉฑเจ เจฌเจฟเจฒเจเฉเจฒ เจตเฉ เจฌเฉเจฐเจพ เจจเจนเฉเจ, เจ เจคเฉ เจตเจฟเจเจพเจธ เจฆเฉ เจฆเจฟเจธเจผเจพ เจเจพเจซเจผเฉ เจธเจเจพเจฐเจพเจคเจฎเจ เจนเฉ.
เจเจธ เจจเฉเจ เจตเจฟเฉฑเจ, เจฎเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ เจเจน เจฆเฉฑเจธเจฃเจพ เจเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ เจเจฟ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจเจพเจฐเจเจเฉเจธเจผเจฒเจคเจพ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฒเจ เจธเฉเจฎเฉเจ เจธเจฟเจธเจเจฎ เจตเจฟเฉฑเจ 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 เจตเจฟเจเจธเจฟเจค เจนเฉ เจฐเจฟเจนเจพ เจนเฉ, เจตเฉฑเจ-เจตเฉฑเจ เจธเจฅเจฟเจคเฉเจเจ เจตเจฟเฉฑเจ เจเจฎเจพเจเจก เจฆเฉ เจฆเจธเจคเจเจค เจ เจคเฉ เจตเจฟเจนเจพเจฐ เจฌเจฆเจฒ เจฐเจนเฉ เจนเจจเฅค 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)
เจเฉเจเจฟเฉฐเจ
เจ
เฉฑเจเฉ, เจเฉเจเจฐ เจขเฉเจเจตเจพเจ เจตเจฟเจเจฒเจช เจฆเจฟเฉฑเจคเจพ เจเจฟเจ เจนเฉ เจคเจพเจ เจ
เจธเฉเจ เจเฉเจก เจเจตเจฐเฉเจ เจฎเจพเจช เจจเฉเฉฐ เจธเจฎเจฐเฉฑเจฅ เจเจฐเจฆเฉ เจนเจพเจเฅค เจฎเฉเจ เจตเฉเจฐเจตเจฟเจเจ เจตเจฟเฉฑเจ เจจเจนเฉเจ เจเจพเจตเจพเจเจเจพ, เจเจฟเจเจเจเจฟ เจเจน เจธเฉเจฎเฉเจ เจฆเฉ เจฌเจเจพเจ เจเจตเจฐเฉเจ เจจเฉเฉฐ เจฎเจพเจชเจฃ เจฒเจ เจเฉฑเจ เจธเจพเจงเจจ เจจเจพเจฒ เจตเจงเฉเจฐเฉ เจธเจฌเฉฐเจงเจค เจนเจจ. เจเจน เจธเจฟเจฐเจซ เจจเฉเจ เจเจฐเจจเจพ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉ เจเจฟ เจจเจคเฉเจเจฟเจเจ เจฆเฉ เจ
เจงเจพเจฐ เจคเฉ เจเฉฑเจ เจเฉเจเจพ เจฌเจฃเจพเจเจ เจเจพเจตเฉเจเจพ 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 -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-unit-tests
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
doc
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
เจธเฉฐเจฆ
-
เจฎเฉเฉฑเจ เจฎเฉฐเจคเจฐเฉ 3.13เจตเจพเจธเจคเจต เจตเจฟเฉฑเจ, CMake เจธเฉฐเจธเจเจฐเจฃ 3.13 เจจเฉเฉฐ เจธเจฟเจฐเจซ เจเจธ เจฎเจฆเจฆ เจตเจฟเฉฑเจ เจตเจฐเจฃเจฟเจค เจเฉเจ เจเฉฐเจธเฉเจฒ เจเจฎเจพเจเจกเจพเจ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฒเจ เจฒเฉเฉเฉเจเจฆเจพ เจนเฉเฅค CMake เจธเจเฉเจฐเจฟเจชเจเจพเจ เจฆเฉ เจธเฉฐเจเฉเจเจธ เจฆเฉ เจฆเฉเจฐเจฟเจธเจผเจเฉเจเฉเจฃ เจคเฉเจ, เจธเฉฐเจธเจเจฐเจฃ 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