C++ เจ…เจคเฉ‡ CMake - เจนเจฎเฉ‡เจธเจผเจพ เจฒเจˆ เจญเจฐเจพ, เจญเจพเจ— II

C++ เจ…เจคเฉ‡ CMake - เจนเจฎเฉ‡เจธเจผเจพ เจฒเจˆ เจญเจฐเจพ, เจญเจพเจ— II

เจชเจฟเจ›เจฒเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจฟเฉฑเจš เจ‡เจธ เจฎเจจเฉ‹เจฐเฉฐเจœเจ• เจ•เจนเจพเจฃเฉ€ เจจเฉ‡ เจธเฉ€เจฎเฉ‡เจ• เจฌเจฟเจฒเจก เจธเจฟเจธเจŸเจฎ เจœเจจเจฐเฉ‡เจŸเจฐ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ‡เฉฑเจ• เจธเจฟเจฐเจฒเฉ‡เจ– เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจจเฉ‚เฉฐ เจธเฉฐเจ—เจ เจฟเจค เจ•เจฐเจจ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เฉ€เจคเฉ€เฅค

เจ‡เจธ เจตเจพเจฐ เจ…เจธเฉ€เจ‚ เจ‡เจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉฐเจ•เจฒเจฟเจค เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจœเฉ‹เฉœเจพเจ‚เจ—เฉ‡, เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจฆเฉ‚เจœเฉ‡ เจจเจพเจฒ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจœเฉ‹เฉœเจจ เจฌเจพเจฐเฉ‡ เจตเฉ€ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจชเจนเจฟเจฒเจพเจ‚ เจตเจพเจ‚เจ—, เจœเฉ‹ เจฌเฉ‡เจธเจฌเจฐเฉ‡ เจนเจจ, เจ‰เจน เจคเฉเจฐเฉฐเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจจ เจ…เฉฑเจชเจกเฉ‡เจŸ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ 'เจคเฉ‡ เจœเจพเจ“ เจ…เจคเฉ‡ เจนเจฐ เจšเฉ€เจœเจผ เจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจนเฉฑเจฅเจพเจ‚ เจจเจพเจฒ เจ›เฉ‚เจนเฉ‹.


เจธเจฎเฉฑเจ—เจฐเฉ€

  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-เจซเจพเจ‡เจฒเฅค เจจเจตเฉ€เจ‚ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจจเฉ‚เฉฐ เจธเจชเฉฑเจธเจผเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจฎเฉŒเจœเฉ‚เจฆเจพ เจธเจฟเจฐเจฒเฉ‡เจ–เจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจน เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฒเจˆ, เจ‡เจธ เจจเฉ‚เฉฐ เจฎเฉŒเจœเฉ‚เจฆเจพ เจ‰เจฆเฉ‡เจธเจผ เจจเจพเจฒ เจœเฉ‹เฉœเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ 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).

เจ…เจคเฉ‡ เจ†เจ“ เจจเจตเฉ€เจ‚ เจ†เจˆ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจจเฉ‚เฉฐ เจงเจฟเจ†เจจ เจตเจฟเฉฑเจš เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹เจ เจ•เจตเจฐเฉ‡เจœ เจฎเจพเจชเจพเจ‚ เจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ•เฉเจ เจฌเจพเจฐเฉ€เจ•เฉ€เจ†เจ‚ เจœเฉ‹เฉœเฉ€เจ:

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

เจธเจฌเจฎเฉ‹เจกเจฟเจŠเจฒ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เจจเฉˆเจ•เจธเจผเจจ

เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจตเจฟเจ•เจฒเจช เจธเจพเจกเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเฉ‡ เจจเจพเจฒ เจซเฉ‹เจฒเจกเจฐ เจจเฉ‚เฉฐ เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจธเจฌเจฎเฉ‹เจกเจฟเจŠเจฒ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเจพเจฒ เจœเฉ‹เฉœเจจเจพ เจนเฉˆ 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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹