2013-08-21 2 views
8

मैं एंड्रॉइड एनडीके का उपयोग अपने cocos2dx प्रोजेक्ट को एंड्रॉइड.एमके के भीतर बनाने के लिए कर रहा हूं, LOCAL_SRC_FILES के लिए एक परिभाषा है जहां प्रत्येक सीपीपी फ़ाइल सूचीबद्ध है। जब भी मैं एक नया स्रोत फ़ाइल कहा, मैं इसे वहाँ जोड़ने के लिए और साथ ही आवश्यकता होगी ... यह इस तरह दिखता है:Android.mk - निर्देशिका में सभी स्रोत फ़ाइल बनाएं

LOCAL_SRC_FILES := hellocpp/main.cpp \ 
        hellocpp/myclass.cpp \ 
        hellocpp/mynextclass.cpp \ 
        ../../Classes/Screens/LaunchScreen.cpp \ 

हेडर फाइल है, तथापि, पूरी निर्देशिका शामिल करने के लिए निर्दिष्ट कर सकते हैं, यह कैसा दिखता इस:

LOCAL_C_INCLUDES := $(LOCAL_PATH)/hellocpp 
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Classes/Screens 

मैं विभिन्न तरीकों की कोशिश की है, पूरे बजाय LOCAL_SRC_FILES के लिए एकल फाइल निर्देशिका ताकि मैं संशोधित करने के लिए जब भी मैं एक नई फ़ाइल जोड़ने Android.mk स्क्रिप्ट निर्माण की जरूरत नहीं है शामिल करने के लिए हालांकि, अब तक मेरे सभी प्रयास विफल रहे। इस रूप में

#SRC_PATH_HELLOCPP := $(wildcard hellocpp/*.cpp) 
#SRC_PATH_CLASSES += $(wildcard ../../Classes/*.cpp) 

#LOCAL_SRC_FILES := $(SRC_PATH_HELLOCPP:$(LOCAL_PATH/%=%) 
#LOCAL_SRC_FILES += $(SRC_PATH_CLASSES:$(LOCAL_PATH/%=%) 

रूप में अच्छी तरह:

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

#LOCAL_SRC_FILES += hellocpp/*.cpp 
#LOCAL_SRC_FILES += ../../Classes/*.cpp 

दोनों काम नहीं कर रहे ...

मैं एक परियोजना है कि पहले विकल्प के साथ अच्छी तरह से काम करता है हालांकि, मैं वास्तव में समझ में नहीं आता कि यह cocos2dx प्रोजेक्ट में क्यों काम नहीं करता है ... क्या कोई जानता है कि समाधान क्यों या पता है? या शायद मुझे इसे छोड़कर परेशानी लेनी चाहिए, क्योंकि हर कोई ऐसा कर रहा है। लेकिन यह वास्तव में परेशानी है, उम्मीद है कि कोई भी मदद कर सकता है ताकि हम सभी अधिक उत्पादक हो सकें ..

धन्यवाद!

उत्तर

17

वाइल्डकार्ड के रूप में अच्छी तरह से cocos2dx परियोजनाओं के लिए काम करता है शामिल होना चाहिए। मैं अपने दम पर यह उपयोग कर रहा हूँ, सिर्फ इतना है कि अपने वाक्य रचना गलत

कोशिश है:

HELLOCPP_FILES := $(wildcard $(LOCAL_PATH)/hellocpp/*.cpp) 
HELLOCPP_FILES := $(HELLOCPP_FILES:$(LOCAL_PATH)/%=%) 

CLASSES_FILES := $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp) 
CLASSES_FILES := $(CLASSES_FILES:$(LOCAL_PATH)/%=%) 

LOCAL_SRC_FILES := $(HELLOCPP_FILES) 
LOCAL_SRC_FILES += $(CLASSES_FILES) 
+1

क्या यह रिकर्सिव है? मेरा मतलब है कि 'कक्षाओं' निर्देशिका में उप निर्देशिकाएं हैं, तो उन निदेशकों के अंदर '.cpp'files को' CLASSES_FILES' में ध्यान में रखा जाएगा? मुझे लगता है कि यह नहीं है। क्या यह इसे रिकर्सिव बनाने का एक तरीका है? – Narek

+1

नहीं, यह रिकर्सिव नहीं है, आपको एक और पंक्ति जोड़नी है जो उपनिर्देशिका –

+0

निर्दिष्ट करती है यह मेरे लिए काम नहीं करती है। वही त्रुटि ... –

0

यह एक मेकफ़ाइल है। मेकफ़ाइल इस तरह काम नहीं करते हैं। आप फ़ाइलों को संकलित करने के लिए एक संपूर्ण निर्देशिका निर्दिष्ट नहीं कर सकते- यह बस उस तरह से स्थापित नहीं है। यह 40 साल या उससे भी ज्यादा समय तक ऐसा रहा है। लोगों को मेकफ़ाइल से नफरत करने के कई कारणों में से एक। समस्या यह है कि सभी प्रतिस्थापन उतना ही खराब हो गया है।

6

असल में वाइल्डकार्ड काम करते हैं और आपको सही रास्ते पर थे ...

यह वही मेरे लिए ठीक काम करता है की एक उदाहरण है:

UTILITIES := $(wildcard $(LOCAL_PATH)/Utility/*.cpp) 
ZIP := $(wildcard $(LOCAL_PATH)/Utility/zip/jni/*.c) 

सूचना $ (LOCAL_PATH) चर के शामिल किए जाने , और फिर

SOURCES := $(UTILITIES:$(LOCAL_PATH)/%=%) 
SOURCES += $(ZIP:$(LOCAL_PATH)/%=%) 

है कि आप किसी भी स्रोत फ़ाइल में ड्रॉप करने और इसे वापस Android.mk फ़ाइल पर जाए बिना संकलित कर देगा अनुमति चाहिए।

+1

धन्यवाद! मैंने कोशिश की है, लेकिन यह अभी भी काम नहीं करता है ... प्रतीक के साथ त्रुटि संकलित नहीं मिला .. – Zennichimaro

+0

मेरा जवाब संपादित करें, पहले दो पंक्तियों की तुलना करें। आप $ (LOCAL_PATH) चर खो रहे हैं। पीएस: मेकफ़ाइल में "#" टिप्पणियों के लिए है! – Erik

1

मुझे लगता है कि आप नए सीपीपी जोड़ा फ़ाइलों के लिए संपूर्ण शीर्ष लेख जोड़ने की जरूरत नहीं है .. आप इसे इस तरह से

उदाहरण के लिए

जोड़ा जाना चाहिए। आप इस LaunchScreen.cpp जोड़ना चाहते हैं तो आप इसे इस आसान तरीका

LOCAL_SRC_FILES:=hellocpp/main.cpp \ 
      ../../Classes/myclass.cpp\ 
      ../../Classes/mynextclass.cpp\ 
      ../../Classes/LaunchScreen.cpp\ 
0

निर्माण करने के लिए अपने सभी।../../Classes/ तहत cpp फ़ाइलें, आप बाहरी find आदेश का उपयोग कर सकते हैं अगर आप एक UNIX- जैसे ओएस पर अपनी परियोजना का निर्माण:

SRC_PATH_CLASSES := $(shell find ../../Classes/ -type f) 
SRC_PATH_CLASSES := $(filter %.cpp, $(SRC_PATH_CLASSES)) 
LOCAL_SRC_FILES += $(SRC_PATH_CLASSES:$(LOCAL_PATH)/%=%) 

रूप link: Recursive wildcards in GNU make? में सुझाव दिया, एक और तरीका निम्नलिखित पुनरावर्ती वाइल्ड कार्ड का उपयोग कर रहा है। यह शुद्ध मेकफ़ाइल नियमों के साथ लिखा गया है, इस प्रकार यह पोर्टेबल और बेहतर है।

rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d)) 
SRC_PATH_CLASSES := $(call rwildcard, ../../Classes/, *.cpp) 
LOCAL_SRC_FILES += $(SRC_PATH_CLASSES:$(LOCAL_PATH)/%=%) 
0

इस के साथ लड़ने के घंटे के बाद मैं एक समाधान है कि अंत में मेरी cocos2dx सेटअप के साथ काम करता पाया (3.10 cocos2dx)

LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../Classes 
FILE_LIST := $(wildcard $(LOCAL_PATH)/../../../Classes/*.cpp) 
LOCAL_SRC_FILES += $(FILE_LIST:$(LOCAL_PATH)/%=%) 

यहाँ के बाद से ही दर्द के साथ किसी की मदद के लिए उत्तर देना -actually- काम करता है, यह सवाल अब भी इस दिन विशेष रूप से, यह भी विंडोज के लिए काम करता है जो मुख्य समस्या यह है कि मैं अन्य समाधान

स्रोत के साथ अनुभव था के लिए प्रासंगिक जा रहा है: http://qiita.com/YosukeMitsugi/items/137f1b57f03945ad2d50

0

इस जीत के 10 वर्ष से कम cocos2dx 3.10 में मेरे लिए क्या काम किया है:

FILE_LIST := $(wildcard $(LOCAL_PATH)/../../../Classes/*.cpp) 

LOCAL_SRC_FILES := hellocpp/main.cpp \ 
LOCAL_SRC_FILES += $(FILE_LIST:$(LOCAL_PATH)/%=%) 
संबंधित मुद्दे