ನಮ್ಮ ಉನ್ನತ ಗುರಿಯನ್ನು ಸಾಧಿಸಲು ನಾವು ಮಾಡಬೇಕಾದ ಮೊದಲ ಕೆಲಸವೆಂದರೆ ನಾವು ಅಭಿವೃದ್ಧಿಪಡಿಸುವ ಸಾಫ್ಟ್ವೇರ್ ಅನ್ನು ಬಳಕೆದಾರರ ದೃಷ್ಟಿಕೋನದಿಂದ ಏಕರೂಪದ ಸಾರ್ವತ್ರಿಕ, ಪ್ರತ್ಯೇಕವಾದ ಬ್ಲಾಕ್ಗಳಾಗಿ ವಿಭಜಿಸುವುದು.
ಮೊದಲ ಭಾಗದಲ್ಲಿ, ಅಂತಹ ಪ್ರಮಾಣಿತ ಬ್ಲಾಕ್ ಅನ್ನು ವಿವರಿಸಲಾಗಿದೆ - ಹೆಡರ್ ಲೈಬ್ರರಿಯೊಂದಿಗೆ ಯೋಜನೆ. ಈಗ ನಮ್ಮ ಯೋಜನೆಗೆ ಸಂಕಲಿಸಿದ ಗ್ರಂಥಾಲಯವನ್ನು ಸೇರಿಸೋಣ.
ಇದನ್ನು ಮಾಡಲು, ಕಾರ್ಯದ ಅನುಷ್ಠಾನವನ್ನು ತೆಗೆದುಕೊಳ್ಳೋಣ myfunc ಪ್ರತ್ಯೇಕವಾಗಿ .cpp- ಫೈಲ್:
ನಂತರ ನಾವು ಕಂಪೈಲ್ ಮಾಡಬೇಕಾದ ಲೈಬ್ರರಿಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತೇವೆ (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)
+
ಮುಂದೆ, ಹೊಸ ಲೈಬ್ರರಿಯನ್ನು ಸಹ ಸಿಸ್ಟಮ್ನಲ್ಲಿ ಸ್ಥಾಪಿಸಲಾಗಿದೆ ಎಂದು ನಾವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುತ್ತೇವೆ:
ಉದ್ದೇಶಕ್ಕಾಗಿ ಎಂದು ಗಮನಿಸಬೇಕು myfeature, ಹಾಗೆ mylib ಪೂರ್ವಪ್ರತ್ಯಯದೊಂದಿಗೆ ಅಲಿಯಾಸ್ ಅನ್ನು ರಚಿಸಲಾಗಿದೆ Mylib::. ಸಿಸ್ಟಂನಲ್ಲಿ ಅನುಸ್ಥಾಪನೆಗೆ ಅವುಗಳನ್ನು ರಫ್ತು ಮಾಡುವಾಗ ಎರಡೂ ಉದ್ದೇಶಗಳಿಗಾಗಿ ಅದೇ ಬರೆಯಲಾಗಿದೆ. ಇದು ಯಾವುದೇ ಗುರಿಗಳೊಂದಿಗೆ ಏಕರೂಪವಾಗಿ ಕೆಲಸ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಸುತ್ತದೆ ಬೈಂಡಿಂಗ್ ಯೋಜನೆ.
ಇದರ ನಂತರ, ಯುನಿಟ್ ಪರೀಕ್ಷೆಗಳನ್ನು ಹೊಸ ಲೈಬ್ರರಿಯೊಂದಿಗೆ ಲಿಂಕ್ ಮಾಡುವುದು ಮಾತ್ರ ಉಳಿದಿದೆ (ಕಾರ್ಯ myfunc ಶೀರ್ಷಿಕೆಯಿಂದ ತೆಗೆದುಹಾಕಲಾಗಿದೆ, ಆದ್ದರಿಂದ ಈಗ ನೀವು ಲಿಂಕ್ ಮಾಡಬೇಕಾಗಿದೆ):
ಶೀರ್ಷಿಕೆಗಳು (Mylib::mylib) ಈಗ ನೀವು ಪ್ರತ್ಯೇಕವಾಗಿ ಸಂಪರ್ಕಿಸುವ ಅಗತ್ಯವಿಲ್ಲ, ಏಕೆಂದರೆ, ಈಗಾಗಲೇ ಹೇಳಿದಂತೆ, ಅವು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಲೈಬ್ರರಿಯೊಂದಿಗೆ ಸಂಪರ್ಕಗೊಂಡಿವೆ (Mylib::myfeature).
ಮತ್ತು ಹೊಸದಾಗಿ ಆಗಮಿಸಿದ ಲೈಬ್ರರಿಯನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಂಡು ಕವರೇಜ್ ಅಳತೆಗಳನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಒಂದೆರಡು ಸೂಕ್ಷ್ಮ ವ್ಯತ್ಯಾಸಗಳನ್ನು ಸೇರಿಸೋಣ:
ನೀವು ಹೆಚ್ಚಿನ ಲೈಬ್ರರಿಗಳು, ಎಕ್ಸಿಕ್ಯೂಟಬಲ್ಗಳು ಇತ್ಯಾದಿಗಳನ್ನು ಸೇರಿಸಬಹುದು. ಯೋಜನೆಯೊಳಗೆ ಅವರು ಎಷ್ಟು ನಿಖರವಾಗಿ ಪರಸ್ಪರ ಸಂಪರ್ಕ ಹೊಂದಿದ್ದಾರೆ ಎಂಬುದು ಮುಖ್ಯವಲ್ಲ. ನಮ್ಮ ಮಾಡ್ಯೂಲ್ನ ಇಂಟರ್ಫೇಸ್ ಯಾವ ಗುರಿಗಳು, ಅಂದರೆ ಅವು ಹೊರಗುಳಿಯುತ್ತವೆ ಎಂಬುದು ಮುಖ್ಯ ವಿಷಯ.
ಈಗ ನಾವು ಪ್ರಮಾಣಿತ ಬ್ಲಾಕ್ ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ಹೊಂದಿದ್ದೇವೆ ಮತ್ತು ನಾವು ಅವುಗಳನ್ನು ಪ್ರಾಬಲ್ಯಗೊಳಿಸಬಹುದು: ಅವುಗಳನ್ನು ಯಾವುದೇ ಸಂಕೀರ್ಣತೆಯ ರಚನೆಯಾಗಿ ಸಂಯೋಜಿಸಿ, ಅವುಗಳನ್ನು ಸಿಸ್ಟಮ್ಗೆ ಸ್ಥಾಪಿಸಿ ಅಥವಾ ಅವುಗಳನ್ನು ಒಂದೇ ಅಸೆಂಬ್ಲಿ ಸಿಸ್ಟಮ್ನಲ್ಲಿ ಒಟ್ಟಿಗೆ ಜೋಡಿಸಿ.
ವ್ಯವಸ್ಥೆಯಲ್ಲಿ ಅನುಸ್ಥಾಪನೆ
ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಬಳಸುವ ಆಯ್ಕೆಗಳಲ್ಲಿ ಒಂದು ನಮ್ಮ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಸಿಸ್ಟಮ್ಗೆ ಸ್ಥಾಪಿಸುವುದು.
ಅದರ ನಂತರ, ಇದು ಆಜ್ಞೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಯಾವುದೇ ಇತರ ಯೋಜನೆಗೆ ಸಂಪರ್ಕ ಹೊಂದಿದೆ find_package.
find_package(Mylib 1.0 REQUIRED)
ಉಪ ಮಾಡ್ಯೂಲ್ ಆಗಿ ಸಂಪರ್ಕ
ನಮ್ಮ ಪ್ರಾಜೆಕ್ಟ್ನೊಂದಿಗೆ ಫೋಲ್ಡರ್ ಅನ್ನು ಮತ್ತೊಂದು ಯೋಜನೆಗೆ ಕಮಾಂಡ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಸಬ್ ಮಾಡ್ಯೂಲ್ ಆಗಿ ಸಂಪರ್ಕಿಸುವುದು ಮತ್ತೊಂದು ಆಯ್ಕೆಯಾಗಿದೆ add_subdirectory.
ಬಳಸಿ
ಬಂಧಿಸುವ ವಿಧಾನಗಳು ವಿಭಿನ್ನವಾಗಿವೆ, ಆದರೆ ಫಲಿತಾಂಶವು ಒಂದೇ ಆಗಿರುತ್ತದೆ. ಎರಡೂ ಸಂದರ್ಭಗಳಲ್ಲಿ, ನಮ್ಮ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಯೋಜನೆಯಲ್ಲಿ ಗುರಿಗಳು ಲಭ್ಯವಿರುತ್ತವೆ Mylib::myfeature и Mylib::mylib, ಇದನ್ನು ಬಳಸಬಹುದು, ಉದಾಹರಣೆಗೆ, ಈ ರೀತಿ:
ನಿರ್ದಿಷ್ಟವಾಗಿ ನಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ, ಗ್ರಂಥಾಲಯ Mylib::myfeature ಲೈಬ್ರರಿಯೊಂದಿಗೆ ಲಿಂಕ್ ಮಾಡಲು ಅಗತ್ಯವಾದಾಗ ಸಂಪರ್ಕಿಸಬೇಕಾಗುತ್ತದೆ libmyfeature. ಸಾಕಷ್ಟು ಹೆಡರ್ಗಳಿದ್ದರೆ, ಲೈಬ್ರರಿಯನ್ನು ಬಳಸುವುದು ಯೋಗ್ಯವಾಗಿದೆ Mylib::mylib.
CMake ಗುರಿಗಳು ಟ್ರಿಕಿ ಆಗಿರಬಹುದು, ಉದಾಹರಣೆಗೆ, ಕೆಲವು ಗುಣಲಕ್ಷಣಗಳು, ಅವಲಂಬನೆಗಳು ಇತ್ಯಾದಿಗಳನ್ನು ಫಾರ್ವರ್ಡ್ ಮಾಡಲು ಮಾತ್ರ ಉದ್ದೇಶಿಸಲಾಗಿದೆ. ಅದೇ ಸಮಯದಲ್ಲಿ, ಅವರೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವುದು ಅದೇ ರೀತಿಯಲ್ಲಿ ಸಂಭವಿಸುತ್ತದೆ.