मैं अपनी परियोजना के कुछ हिस्सों को चाहता हूं, जिन्हें बहुत ही कम रूप से बदला जाता है, अलग-अलग निर्देशिका में स्थिर और "स्थापित" संकलित किया जाता है। यह जरूरी है क्योंकि परियोजना के कुछ विनिर्देशों के कारण अक्सर इसे स्क्रैच से पुनः संकलित किया जाना चाहिए (संपूर्ण निर्माण निर्देशिका को हटाने के साथ)। अलग-अलग निर्देशिका में स्थिर रूप से जुड़े पुस्तकालयों को "इंस्टॉल करना" निर्माण समय को काफी कम करने की अनुमति देगा।सीएमके में एक और स्थैतिक आयातित लाइब्रेरी पर निर्भर स्थिर आयातित लाइब्रेरी को कैसे बनाया जाए?
मेरी शुरुआत में क्या था। आइए मान लें कि लीबिया बहुत ही कम हो गई है और मैं इसे एक बार स्थापित करना चाहता हूं और अधिकांश परियोजनाओं के निर्माण के दौरान पुनर्निर्माण नहीं करना चाहता हूं। लीबिया कुछ तृतीय पक्ष आयातित पुस्तकालय लिबसी पर निर्भर करता है। परियोजना में लिब भी शामिल है जो अक्सर बदलता है और लीबिया पर निर्भर करता है।
CMakeLists.tst (LibB):
target_link_libraries("LibB" LibA_build)
CMakeLists.tst (LibA):
add_library(LibA_build ...)
add_library(LibC STATIC IMPORTED)
add_dependencies(LibA_build LibC)
इस मामले में LibB जोड़ने हम LIBA और libc पर निर्भरता होगा दौरान। और लीब बनाने से पहले हर बार हम लीबिया का पुनर्निर्माण करेंगे।
मैं नया लक्ष्य "LIBA" (नहीं की अनावश्यक rebuilds से बचने के लिए LIBA "" LibA_build)। तो अब LibB पर निर्भर करता है "।
CMakeLists.tst (LibB):
target_link_libraries("LibB" LibA)
इस नए लक्ष्य मैं आयातित पुस्तकालय के रूप में घोषित कर दिया।
CMakeLists.tst (LibA):
# This target is for building and installing
add_library(LibA_build ...)
SET_TARGET_PROPERTIES(LibA_build PROPERTIES OUTPUT_NAME LibA)
install(
FILES /build/path/to/LibA.lib
DESTINATION /installed/path/to/LibA
)
# This target is for linking LibA with another libraries
add_library(LibA STATIC IMPORTED GLOBAL)
set_property(TARGET LibA PROPERTY IMPORTED_LOCATION /installed/path/to/LibA)
add_library(LibC STATIC IMPORTED)
add_dependencies(LibA LibC)
परिणाम:। अब LibB के निर्माण से पहले हम पुनर्निर्माण नहीं कर रहे हैं LIBA
समस्या: क्योंकि अब LIBA आयातित बने पुस्तकालय, सीएमके ने लीबिया पर लीबिया की निर्भरता देखने से इंकार कर दिया। वास्तव में लिब के लिए लिंकिंग निर्देश में केवल लीबिया पर निर्भरता है, लेकिन लिबसी पर नहीं है। विंडोज के तहत बिल्डिंग के मामले में यह अनसुलझे बाहरी लिंकिंग त्रुटियों की ओर जाता है।
प्रश्न: स्थैतिक आयातित लाइब्रेरी को कैसे बनाया जाए, एक अन्य स्थैतिक आयातित लाइब्रेरी पर आधारित लीबिया? इसलिए लिंकिंग के लिए लिबबी निर्देश को जोड़ने के मामले में लीबिया और लीब दोनों पर निर्भरताएं शामिल होंगी।
पीएस मुझे पता है कि इस तरह से उचित तरीका नहीं है। मैंने इसे केवल इसलिए इस्तेमाल किया क्योंकि मुझे कोई और रास्ता नहीं मिला। मैं वास्तव में सराहना करता हूं अगर आप मुझे स्थिर आयात पुस्तकालय पर इस निर्भरता को जोड़ने में मदद करते हैं या किसी अन्य तरीके से सुझाव देते हैं कि मैं भिक्षा में वर्णित समृद्ध लक्ष्य कैसे प्राप्त करूं।
आप एक कस्टम लक्ष्य बना सकते हैं जो केवल 'libA' के लिए "साफ" करता है या आपकी परियोजना का जो भी विशिष्ट हिस्सा टूट जाता है और उसे लगातार खरोंच की आवश्यकता होती है। या आप मूल कारण को ठीक कर सकते हैं, जो कि तथ्य यह है कि पुनर्निर्माण को खरोंच से किया जाना चाहिए। –
खैर, मैं सफाई करने के बजाय "आरएम-आरएफ *" पर अधिक भरोसा करता हूं :) वैसे भी, सुझाव के लिए धन्यवाद। – Alex
मेरा मुद्दा यह है कि आप सीएमके में एक कस्टम लक्ष्य लिख सकते हैं जो आप चाहते हैं तो 'आरएम-आरएफ' चलाता है। –