2012-06-10 14 views
6

में स्रोत_ग्रुप में फ़ाइलों को जोड़ना मुझे सीएमके के साथ कोई समस्या है जिसमें मुझे विजुअल स्टूडियो के अंदर फ़ोल्डर्स/फ़िल्टर में अपनी फाइलें नहीं मिल सकतीं।सीएमके

# Add folders to filters 
file(GLOB_RECURSE DATABASE_SRCS  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/database *.cpp *.h) 
file(GLOB_RECURSE LOG_SRCS   RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/log *.cpp *.h) 
file(GLOB_RECURSE NETWORK_SRCS  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/network *.cpp *.h) 
file(GLOB_RECURSE THREADING_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/threading *.cpp *.h) 
file(GLOB_RECURSE UTILS_SRCS  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/utils *.cpp *.h) 

source_group(database FILES ${DATABASE_SRCS}) 
source_group(log  FILES ${LOG_SRCS}) 
source_group(network FILES ${NETWORK_SRCS}) 
source_group(threading FILES ${THREADING_SRCS}) 
source_group(utils  FILES ${UTILS_SRCS}) 

एक मुद्दा यह है कि इस समस्या का कारण हो सकता है कि GLOB_RECURSE की फ़ाइलों को ${CMAKE_CURRENT_SOURCE_DIR} में हैं, लेकिन /database (या जो भी अन्य निर्देशिका) के सापेक्ष वापसी है।

उदाहरण के लिए, database/ में dbcore.cpp नामक एक फ़ाइल है। यह फ़ाइल DATABASE_SRCS को dbcore.cpp के रूप में जोड़ा जाता है, लेकिन मुख्य निर्देशिका (यानी ${CMAKE_CURRENT_SOURCE_DIR}) में फ़ाइलें भी शामिल हो जाती हैं, लेकिन database/, ../common.h जैसे सापेक्ष पथ है।

एक और मुद्दा यह हो सकता है कि विजुअल स्टूडियो प्रोजेक्ट के अंदर डिफ़ॉल्ट "शीर्षलेख फ़ाइलें" और "स्रोत फ़ाइलें" फ़िल्टर पहले से मौजूद हैं।

मैं सीएमके 2.8.6 और विजुअल स्टूडियो 11/2012 का उपयोग कर रहा हूं।

उत्तर

8

हर बार सभी फाइलों को लौटने file(GLOB_RECURSE... कॉल से बचने के लिए की तरह कुछ का उपयोग करें:

file(GLOB_RECURSE DATABASE_SRCS 
     RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} 
     ${CMAKE_CURRENT_SOURCE_DIR}/database/*.cpp 
     ${CMAKE_CURRENT_SOURCE_DIR}/database/*.h) 

यह database/dbcore.cpp;database/dbcore.h;... करने के लिए DATABASE_SRCS का मान सेट करेगा, जो आपके source_group कॉल ठीक से काम करना चाहिए।

हालांकि, file(GLOB के लिए दस्तावेज़ से:

हम अपने स्रोत पेड़ से स्रोत फ़ाइलों की एक सूची इकट्ठा करने के लिए GLOB उपयोग करने की अनुशंसा नहीं करते। यदि कोई स्रोत जोड़ा या निकाला गया है, तो कोई CMakeLists.txt फ़ाइल नहीं बदलती है, तो जेनरेट बिल्ड सिस्टम को पता नहीं हो सकता कि कब सेमेक को पुन: उत्पन्न करने के लिए कहता है।

पूर्ण विवरण देखने के लिए,

cmake --help-command file 

परियोजना फ़ाइलों की सूची को सामान्य रूप से सुझाया गया तरीका CMakeLists.txt को हाथ से उन्हें जोड़ने के लिए है चलाते हैं।

अपने अंतिम मुद्दे का उत्तर देने के लिए, यदि विजुअल स्टूडियो की डिफ़ॉल्ट "शीर्षलेख फ़ाइलें" और "स्रोत फ़ाइलें" खाली हैं (यानी सभी फाइलें अन्य फ़ोल्डरों में दिखाई देती हैं), तो वे प्रकट नहीं होते हैं। इन डिफ़ॉल्टों की उपस्थिति source_group का उपयोग करके बनाए गए किसी भी फ़ोल्डर को प्रभावित नहीं करती है।