CMake लक्ष्य_लिंक_ लाइब्रेरी इंटरफ़ेस निर्भरताएँ


99

मैं CMake के लिए नया हूँ और PUBLIC, PRIVATE और INTERFACE कीवर्ड से संबंधित थोड़ा उलझन में हूँ target_link_libraries()। दस्तावेज़ीकरण में उल्लेख किया गया है कि उनका उपयोग लिंक निर्भरता और एक कमांड में लिंक इंटरफ़ेस दोनों को निर्दिष्ट करने के लिए किया जा सकता है।

लिंक निर्भरता और लिंक इंटरफ़ेस वास्तव में क्या मतलब है?


1
इसी तरह के सवाल: stackoverflow.com/questions/26243169/…
TManhente

जवाबों:


201

यदि आप एक साझा लायब्रेरी बना रहे हैं और आपका स्रोत किसी अन्य लायब्रेरी के हेडर को खोल देता है (उदाहरण के लिए QtNetwork कहें), लेकिन आपकी हेडर फ़ाइलों में QtNetwork हेडर शामिल नहीं हैं, तो QtNetwork एक PRIVATEनिर्भरता है।

यदि आपके स्रोत की फाइलें और आपके हेडर में किसी अन्य लाइब्रेरी के हेडर शामिल हैं, तो यह एक PUBLICनिर्भरता है।

यदि आपकी हेडर फाइलें लेकिन आपकी स्रोत फ़ाइलों में अन्य लाइब्रेरी के हेडर शामिल नहीं हैं, तो यह एक INTERFACEनिर्भरता है।

के अन्य निर्माण गुण PUBLICऔर INTERFACEनिर्भरता लेने वाली पुस्तकालयों के लिए उगाया जाता है। http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transitive-usage-requirements


40
इस सवाल का सबसे स्पष्ट स्पष्टीकरण मैंने कभी सुना है। मुझे लगता है कि cmake प्रलेखन स्पष्ट था! :-)
इला --२ --२

1
स्पष्टीकरण के लिए धन्यवाद, अब मैं इसका अर्थ समझता हूं लेकिन यह निर्दिष्ट PUBLICया PRIVATEमायने क्यों रखता है? यह क्या बदलता है?
user3667089

8
का उपयोग PRIVATEकर अपने पुस्तकालय से जोड़ने परियोजनाओं के लिए अपनी निर्भरता नहीं जोड़ता है। यह क्लीनर है और यह आपकी निर्भरता और आपके उपयोगकर्ता के बीच संभावित संघर्ष से भी बचता है।
user2658323

7
@steveire स्पष्टता के लिए, यह स्पष्ट रूप से लायक हो सकता है कि "शामिल" का अर्थ है प्रत्यक्ष समावेश, न कि केवल प्रत्यक्ष समावेश। उदाहरण के लिए, यदि किसी अन्य लाइब्रेरी की हेडर फाइलें केवल आपकी हेडर फाइलों द्वारा सीधे शामिल की जाती हैं, लेकिन आपकी सभी हेडर फाइलें आपकी सोर्स फाइल्स में शामिल होती हैं, तो आपकी सोर्स फाइल्स में अन्य लाइब्रेरी की हेडर फाइल शामिल होती हैं, और इसलिए आपके पास एक PUBLICनिर्भरता है, नहीं एक INTERFACEनिर्भरता।
Ose

Cmake प्रलेखन को संक्षिप्त रूप में इस उत्तर के रूप में लिखना चाहिए!
ब्रायन जेय हर्नग चोंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.