मेरे पास मेकफ़ाइल के साथ एक छोटी परियोजना है जिसे मैं सीएमके में परिवर्तित करने की कोशिश कर रहा हूं, ज्यादातर सीएमके के साथ अनुभव प्राप्त करने के लिए। इस उदाहरण के प्रयोजनों के लिए, प्रोजेक्ट में एक स्रोत फ़ाइल (सी ++ है, हालांकि मुझे नहीं लगता कि भाषा विशेष रूप से प्रासंगिक है) और एक स्थिर लाइब्रेरी फ़ाइल जिसे मैंने कहीं और कॉपी किया है। तर्क के लिए मान लें कि लाइब्रेरी में स्रोत कोड अनुपलब्ध है; मेरे पास केवल .a फ़ाइल और संबंधित शीर्षलेख है।मैं सीएमके को स्रोत निर्देशिका में एक स्थिर पुस्तकालय में जोड़ने के लिए कैसे कहूं?
main: main.o libbingitup.a
g++ -o main main.o libbingitup.a
जो ठीक काम करता है:
मेरे हाथ से बने Makefile इस बिल्ड नियम शामिल हैं। मैं इसे पुन: पेश करने के लिए सीएमके को कैसे बताऊं? सचमुच यह सटीक मेकफ़ाइल नहीं है, लेकिन कुछ ऐसा है जिसमें समकक्ष लिंकिंग कमांड शामिल है। मैं एक सफल संबंध में साथ link_directories(.)
या add_library(bingitup STATIC IMPORTED)
आदि लेकिन अभी तक कुछ भी है कि परिणाम स्पष्ट लेकिन अनुभवहीन तरीके की कोशिश की है,
add_executable(main main.cpp libbingitup.a)
या
add_executable(main main.cpp)
target_link_libraries(main libbingitup.a)
साथ ही विभिन्न चीजों की तरह। मुझे क्या करना चाहिए?
संस्करण विवरण: लिनक्स पर CMake 2.8.7 (Kubuntu 12.04) जीसीसी 4.6.3
बढ़िया है, कि काम करता है का उपयोग करते हुए धन्यवाद पुस्तकालय के लिए पथ को जोड़ने के लिए चाहते हो सकता है! यह स्पष्ट रूप से यहां पूर्ण पथ में डालने के लिए थोड़ा हैकिश लगता है, लेकिन मुझे लगता है कि यह केवल सीएमके रास्ता है ... –
मैं मानता हूं कि यह यहां ओवरकिल जैसा लगता है, लेकिन स्पष्ट रूप से पूर्ण पथ निर्दिष्ट करने से लाभांश का भुगतान होता है यदि आपके पास कई अलग-अलग संस्करण हैं एक ही lib के स्थापित। – Fraser
आश्चर्यजनक, सामान्य रूप से! मेरे मामले में, एक और निर्मित गतिशील पुस्तकालय के आधार पर पुस्तकालयों की एक समस्या हल हुई जो स्थिर पुस्तकालय के आधार पर थी: निर्भर पुस्तकालय भी इस स्थिर पुस्तकालय से जुड़ने की कोशिश कर रहे थे। – Antonio