2013-11-27 5 views
10

मैं Xcode के साथ CMake उपयोग कर रहा हूँ एक सी ++/ग "परियोजना" (my_project) और कुछ C++/ग "लक्ष्य" उत्पन्न करने के लिए (एक एक द्विआधारी है, बाकी पुस्तकालय हैं)CMake शीर्ष स्तरीय XCode प्रोजेक्ट गुण

project(my_project) 
add_subdirectory(library_projectA) 
add_subdirectory(library_projectB) 
add_subdirectory(binary_project) 

प्रत्येक उपनिर्देशिका के साथ या तो एक CMakeLists.txt है:: मेरी CMakeLists.txt कुछ इस तरह दिखता

add_library(library_projectA) 

या

add_executable(binary_project) 

जो शीर्ष स्तर my_project.xcodeproj उत्पन्न करता है, जो उपप्रोजेक्ट का संदर्भ देता है।

लक्ष्य, परियोजना, डिफ़ॉल्ट

मैं my_project के लिए "परियोजना" क्षेत्रों को बदलने के लिए है, यानी चाहते हैं:

Xcode इस श्रेणीबद्ध संपत्ति विरासत (बाएं क्षेत्रों सही क्षेत्रों से प्राथमिकता दी जाती है)। यह सभी लक्ष्यों को प्रभावित करना चाहिए।

मैं इस की कोशिश की है:

add_custom_target(my_project) 
add_target_properties(my_project PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") 

लेकिन यह काम नहीं करता।

ध्यान दें कि अगर मैं "लक्ष्य" में से एक में यह डाल: फिर

add_target_properties(binary_project PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") 

इस काम करता है, लेकिन केवल कि "लक्ष्य"

यदि यह स्पष्ट नहीं है, मैं था के लिए एक कामकाजी उदाहरण प्रदान करने में प्रसन्न रहें, लेकिन इसमें कुछ समय लगेगा ...

किसी भी मौके पर किसी को भी पूरी समस्या के त्वरित समाधान के बारे में पता है, तो मुझे एक्सकोड का क्लीन इंस्टॉल नहीं चाहिए इस (या किसी अन्य) चेतावनी के साथ आओ:

प्रोजेक्ट 'my_project' आर्किटेक्चर सेटिंग को ओवरराइड करता है। यह सेटिंग को हटा देगा और सक्रिय प्लेटफ़ॉर्म के लिए उपलब्ध हार्डवेयर और परिनियोजन लक्ष्य के आधार पर एक्सकोड स्वचालित रूप से आर्किटेक्चर का चयन करने की अनुमति देगा।

उत्तर

3

मुझे हाल ही में एक ही चीज़ की आवश्यकता है इसलिए मुझे सीएमके के स्रोत कोड को देखना पड़ा।

वर्तमान में, आप केवल लक्ष्य के लिए विशेषताओं को सेट कर सकते हैं और उन्हें परियोजना स्तर पर सेट करने का कोई तरीका नहीं है।

हालांकि, परियोजना स्तर पर ONLY_ACTIVE_ARCH को थोड़ा अलग तरीके से बदलना संभव है। सेमेक में लागू तर्क निम्नलिखित है (संस्करण 2.8 के लिए।12):

  1. तो CMAKE_OSX_ARCHITECTURES सेट नहीं है, तो cmake ONLY_ACTIVE_ARCHYES करने के लिए परियोजना स्तर पर करता है और xcode संस्करण के आधार पर यह डिफ़ॉल्ट आर्किटेक्चर सेट करने के लिए या तो $(ARCHS_STANDARD_32_64_BIT) या $(ARCHS_STANDARD_32_BIT)
  2. तो CMAKE_OSX_ARCHITECTURES परिभाषित किया गया है, तो ONLY_ACTIVE_ARCH हो जाता है NO

मैं CMAKE_OSX_ARCHITECTURES स्थापित करने के लिए पसंद करते हैं, ताकि XCode वसा पुस्तकालयों बनाता है और सबसे बड़ी लाइब्रेरी के लिए मैं सिर्फ मैन्युअल रूप से डीबग ग के लिए हाँ करने के लिए ONLY_ACTIVE_ARCH सेट केवल परिश्रम। यह है कि जैसा दिखता है:

set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)") 

... 

set_target_properties(test PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] "YES") 
+0

दुःख की बात यह चेतावनी ओपी के बारे में बात कर रही है को दूर नहीं करता और ठीक XCode पता चलता है जो कुछ अजीब कारण के लिए अन्य सेटिंग्स का एक समूह को हटा उपयोग करने के लिए हमें बाध्य करती है। – Samaursa

संबंधित मुद्दे