C++ เปเบฅเบฐ CMake - เบญเป‰เบฒเบเบ™เป‰เบญเบ‡เบ•เบฐเบซเบผเบญเบ”เป„เบ›, เบชเปˆเบงเบ™ II

C++ เปเบฅเบฐ CMake - เบญเป‰เบฒเบเบ™เป‰เบญเบ‡เบ•เบฐเบซเบผเบญเบ”เป„เบ›, เบชเปˆเบงเบ™ II

เปƒเบ™เบชเปˆเบงเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ เป€เบฅเบทเปˆเบญเบ‡เบ—เบตเปˆเบšเบฑเบ™เป€เบ—เบตเบ‡เบ™เบตเป‰เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบซเบปเบงเบžเบฒเบเปƒเบ™เบ•เบปเบงเบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบš CMake.

เป€เบงเบฅเบฒเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบžเบตเปˆเบกเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเบเบฑเบšเบกเบฑเบ™, เปเบฅเบฐเบเบฑเบ‡เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เป‚เบกเบ”เบนเบ™เป€เบŠเบดเปˆเบ‡เบเบฑเบ™เปเบฅเบฐเบเบฑเบ™.

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบœเบนเป‰เบ—เบตเปˆเบญเบปเบ”เบ—เบปเบ™เบชเบฒเบกเบฒเบ”เบ—เบฑเบ™เบ—เบต เป„เบ›เบ—เบตเปˆ repository เบ›เบฑเบšเบ›เบธเบ‡ เปเบฅเบฐเปเบ•เบฐเบ—เบธเบเบขเปˆเบฒเบ‡เบ”เป‰เบงเบเบกเบทเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบญเบ‡.


เป€เบ™เบทเป‰เบญเปƒเบ™

  1. เปเบšเปˆเบ‡
  2. เป€เบญเบปเบฒเบŠเบฐเบ™เบฐ

เปเบšเปˆเบ‡

เบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เป€เบžเบทเปˆเบญเบšเบฑเบ™เบฅเบธเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบญเบฑเบ™เบชเบนเบ‡เบชเบปเปˆเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เบเบฒเบ™เปเบšเปˆเบ‡เบŠเบญเบšเปเบงเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบžเบฑเบ”เบ—เบฐเบ™เบฒเบญเบญเบเป€เบ›เบฑเบ™เบšเบฅเบฑเบญเบเบ—เบตเปˆเป‚เบ”เบ”เบ”เปˆเบฝเบง, เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบžเบฒเบšเบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰.

เปƒเบ™เบชเปˆเบงเบ™เบ—เปเบฒเบญเบดเบ”, เบ•เบฑเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป„เบ”เป‰เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบ - เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบกเบตเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบซเบปเบง. เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบฎเบปเบฒเป€เบžเบตเปˆเบกเบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเปƒเบชเปˆเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เปƒเบซเป‰เป€เบญเบปเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆ myfunc เปƒเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ .cpp- เป„เบŸเบฅโ€‹เปŒโ€‹:

diff --git a/include/mylib/myfeature.hpp b/include/mylib/myfeature.hpp
index 43db388..ba62b4f 100644
--- a/include/mylib/myfeature.hpp
+++ b/include/mylib/myfeature.hpp
@@ -46,8 +46,5 @@ namespace mylib

         ~  see mystruct
      */
-    inline bool myfunc (mystruct)
-    {
-        return true;
-    }
+    bool myfunc (mystruct);
 }
diff --git a/src/mylib/myfeature.cpp b/src/mylib/myfeature.cpp
new file mode 100644
index 0000000..abb5004
--- /dev/null
+++ b/src/mylib/myfeature.cpp
@@ -0,0 +1,9 @@
+#include <mylib/myfeature.hpp>
+
+namespace mylib
+{
+    bool myfunc (mystruct)
+    {
+        return true;
+    }
+}

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบˆเบฐเบฅเบงเบšเบฅเบงเบก (myfeature), เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบชเบดเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ .cpp- เป„เบŸเบฅเปŒ. เบซเปเบชเบฐเบซเบกเบธเบ”เปƒเบซเบกเปˆเปเบ™เปˆเบ™เบญเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ headers เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง, เปเบฅเบฐเป€เบžเบทเปˆเบญเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ™เบตเป‰, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เปเบฅเบฐเบ„เบงเบ™เบˆเบฐเบ–เบทเบเบœเบนเบเบกเบฑเบ”เบเบฑเบšเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง. mylib. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบฅเบฐเบซเบงเปˆเบฒเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบกเปˆเบ™เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบˆเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ myfeature, เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป‚เบซเบผเบ”เปเบฅเบฐเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ mylib (เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบ–เบฑเบ).

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 108045c..0de77b8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -64,6 +64,17 @@ target_compile_features(mylib INTERFACE cxx_std_17)

 add_library(Mylib::mylib ALIAS mylib)

+###################################################################################################
+##
+##      ะšะพะผะฟะธะปะธั€ัƒะตะผะฐั ะฑะธะฑะปะธะพั‚ะตะบะฐ
+##
+###################################################################################################
+
+add_library(myfeature src/mylib/myfeature.cpp)
+target_link_libraries(myfeature PUBLIC mylib)
+
+add_library(Mylib::myfeature ALIAS myfeature)
+

เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปƒเบซเบกเปˆเป„เบ”เป‰เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบš:

@@ -72,7 +83,7 @@ add_library(Mylib::mylib ALIAS mylib)

 install(DIRECTORY include/mylib DESTINATION include)

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

 include(CMakePackageConfigHelpers)

เบ„เบงเบ™เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡ myfeature, เบชเปเบฒเบฅเบฑเบš mylib เบ™เบฒเบกเปเบเบ‡เบ—เบตเปˆเบกเบตเบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™ Mylib::. เบ”เบฝเบงเบเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เป„เบงเป‰เบชเปเบฒเบฅเบฑเบšเบ—เบฑเบ‡เบชเบญเบ‡เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบชเบปเปˆเบ‡เบญเบญเบเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปƒเบ™เบฅเบฐเบšเบปเบš. เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป€เบ›เบฑเบ™เป€เบญเบเบฐเบžเบฒเบšเบเบฑเบšเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปƒเบ”เป† เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบœเบนเบโ€‹เบกเบฑเบ”โ€‹.

เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบตเป‰โ€‹, เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ—เบตเปˆโ€‹เบเบฑเบ‡โ€‹เป€เบซเบผเบทเบญโ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบซเบปเบงโ€‹เบซเบ™เปˆเบงเบโ€‹เบเบฑเบšโ€‹เบซเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบธเบ”โ€‹เปƒเบซเบกเปˆ (เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹ myfunc เป€เบญเบปเบฒเบญเบญเบเบˆเบฒเบเบซเบปเบงเบ‚เปเป‰, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ):

diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 5620be4..bc1266c 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -4,7 +4,7 @@ add_executable(mylib-unit-tests test_main.cpp)
 target_sources(mylib-unit-tests PRIVATE mylib/myfeature.cpp)
 target_link_libraries(mylib-unit-tests
     PRIVATE
-        Mylib::mylib
+        Mylib::myfeature
         doctest::doctest
 )

เบซเบปเบงเบ‚เปเป‰ (Mylib::mylib) เปƒเบ™โ€‹เบ›เบฑเบ”โ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹เบ—เปˆเบฒเบ™โ€‹เบšเปเปˆโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เปเบเบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบซเบฒเบโ€‹, เป€เบžเบฒเบฐโ€‹เบงเปˆเบฒโ€‹, เบ”เบฑเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบเปˆเบฒเบงโ€‹เปเบฅเป‰เบงโ€‹, เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เบญเบฑเบ”โ€‹เบ•เบฐโ€‹เป‚เบ™โ€‹เบกเบฑเบ”โ€‹เบžเป‰เบญเบกโ€‹เบเบฑเบšโ€‹เบซเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบธเบ” (Mylib::myfeature).

เปเบฅเบฐเปƒเบซเป‰เป€เบžเบตเปˆเบกเบชเบญเบ‡เบชเบฒเบก nuances เป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เบงเบฑเบ”เปเบ—เบเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เป‚เบ”เบเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒเปƒเบซเบกเปˆ:

@@ -15,11 +15,16 @@ if(MYLIB_COVERAGE AND GCOVR_EXECUTABLE)
     target_compile_options(mylib-unit-tests PRIVATE --coverage)
     target_link_libraries(mylib-unit-tests PRIVATE gcov)

+    target_compile_options(myfeature PRIVATE --coverage)
+    target_link_libraries(myfeature PRIVATE gcov)
+
     add_custom_target(coverage
         COMMAND
             ${GCOVR_EXECUTABLE}
-                --root=${PROJECT_SOURCE_DIR}/include/
-                --object-directory=${CMAKE_CURRENT_BINARY_DIR}
+                --root=${PROJECT_SOURCE_DIR}/
+                --filter=${PROJECT_SOURCE_DIR}/include
+                --filter=${PROJECT_SOURCE_DIR}/src
+                --object-directory=${PROJECT_BINARY_DIR}
         DEPENDS
             check
     )

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบกเบฑเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบ™เบเบฑเบšเบเบฑเบ™เปเบฅเบฐเบเบฑเบ™เบžเบฒเบเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เปเบ™เบงเปƒเบ”. เบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเปเบกเปˆเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปเบกเปˆเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบžเบงเบเบกเบฑเบ™เบ•เบดเบ”เบญเบญเบ.

เป€เบญเบปเบฒเบŠเบฐเบ™เบฐ

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบกเบตเป‚เบกเบ”เบนเบ™เบ•เบฑเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ„เบญเบšเบ‡เปเบฒเบžเบงเบเบกเบฑเบ™เป„เบ”เป‰: เบ›เบฐเบเบญเบšเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เปƒเบ”เป†, เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบžเบงเบเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบšเบปเบšเบซเบผเบทเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบžเบงเบเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เบžเบฒเบเปƒเบ™เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ›เบฐเบเบญเบšเบ”เบฝเบง.

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปƒเบ™เบฅเบฐเบšเบปเบš

เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป‚เบกเบ”เบนเบ™เปเบกเปˆเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบกเบ”เบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบšเบปเบš.

cmake --build ะฟัƒั‚ัŒ/ะบ/ัะฑะพั€ะพั‡ะฝะพะน/ะดะธั€ะตะบั‚ะพั€ะธะธ --target install

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบฑเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบญเบทเปˆเบ™เป†เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ find_package.

find_package(Mylib 1.0 REQUIRED)

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบ›เบฑเบ™เป‚เบกเบ”เบนเบ™เบเปˆเบญเบ

เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบญเบทเปˆเบ™เปเบกเปˆเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป‚เบŸเบ™เป€เบ”เบตเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบญเบทเปˆเบ™เป€เบ›เบฑเบ™ submodule เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ add_subdirectory.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰

เบงเบดเบ—เบตเบเบฒเบ™เบœเบนเบเบกเบฑเบ”เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เปเบ•เปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบ„เบทเบเบฑเบ™. เปƒเบ™เบ—เบฑเบ‡เบชเบญเบ‡เบเปเบฅเบฐเบ™เบต, เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบˆเบฐเบกเบตเบขเบนเปˆเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เป‚เบ”เบเปƒเบŠเป‰เป‚เบกเบ”เบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ Mylib::myfeature ะธ Mylib::mylib, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

add_executable(some_executable some.cpp sources.cpp)
target_link_libraries(some_executable PRIVATE Mylib::myfeature)

เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” Mylib::myfeature เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบˆเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” libmyfeature. เบ–เป‰เบฒเบกเบตเบซเบปเบงเบžเบฝเบ‡เบžเป, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบเปเปˆเบ„เบธเป‰เบกเบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” Mylib::mylib.

เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ CMake เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบเบฒเบ, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบžเบฝเบ‡เปเบ•เปˆเบชเบปเปˆเบ‡เบ•เปเปˆเบšเบฒเบ‡เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”, เบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบš, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบžเบงเบเบกเบฑเบ™เป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™.

เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบฎเบฑเบš.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™