2011-11-29 9 views
8

बनाता है मैं अपने प्रोजेक्ट के लिए सेमेक सेट अप कर रहा हूं और मैंने इसके लिए एक परीक्षण प्रोजेक्ट स्थापित किया है। जब यह मेरे विजुअल स्टूडियो 2010 प्रोजेक्ट को उत्पन्न करता है, तो मैं इसे पहले प्रोजेक्ट के रूप में बनाना चाहता हूं।निर्दिष्ट करें कि कैसे सेमेक विजुअल स्टूडियो प्रोजेक्ट

  • यह एक ALL_BUILD और ZERO_CHECK प्रोजेक्ट बनाता है जो मैं नहीं चाहता।
  • यह .h फ़ाइलों को बाहरी निर्भरता फ़ोल्डर में रखता है। मैं एक फाइल फ़ोल्डर शामिल करना चाहता हूं जहां सभी .h फाइलें जाती हैं।
  • मैं कुछ फाइलों को अलग-अलग फ़िल्टरों के तहत समूहबद्ध करना चाहता हूं। मेरे मूल lib में की तरह मैं एक फ़ोल्डर में गणित से संबंधित सभी फाइलों और किसी अन्य में इवेंट मैनेजमेंट से संबंधित सभी फाइलों को समूहबद्ध करना चाहता हूं।
  • फाइल सिस्टम पर यह प्रोजेक्ट फ़ाइलों को/Lib/src के अंदर रखता है। शायद कारण है कि मैंने इसे व्यवस्थित किया है कि कोड फ़ोल्डर में, लेकिन मैं प्रोजेक्ट फ़ाइलों के लिए नहीं चाहता हूं।
  • मैं अलग-अलग कॉन्फ़िगरेशन सेट अप करना चाहता हूं, इसलिए मेरे पास DebugOpenGL, DebugDirectX, रिलीज़ ओपनजीएल, रिलीज डायरेक्टएक्स है और फिर दो प्रकार की कॉन्फ़िगरेशन के लिए ध्वज USE_OPENGL या USE_DIRECTX सेट करना है।

जब मैं लिनक्स पर निर्माण करता हूं तो मैं विंडोज़ और अन्य पर निर्माण करते समय कुछ फ़ाइलों को कैसे बाहर निकाल सकता हूं? जैसे कि मेरे पास WindowWin.cpp और WindowLinux.cpp है।


मैं कोशिश की है कि तुम क्या sugested लेकिन प्राप्त नहीं कर सकते यह काम कर रहा:

#LibProject/src 

FILE(GLOB test0_headers $CMakeTest_SOURCE_DIR/LibProject/inc/test.h) 
source_group(include0 FILES ${test0_headers}) 
FILE(GLOB test0_source ${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp) 
source_group(source0 FILES ${test0_source}) 

FILE(GLOB test1_headers $CMakeTest_SOURCE_DIR/LibProject/inc/test1.h) 
source_group(include1 FILES ${test1_headers}) 
FILE(GLOB test1_source ${CMakeTest_SOURCE_DIR}/LibProject/src/test1.cpp) 
source_group(source1 FILES ${test1_source}) 

include_directories(${test0_headers} ${test1_headers}) 

add_library(LibProject ${test0_headers} ${test1_headers} ${test0_source} ${test 
1_source}) 

मैं एक तरह से यह काम कर रहा .. केवल कि मैं हेडर और स्रोत फ़ाइलों के लिए सब फ़ोल्डर चाहते मिला स्रोत समूह के अंदर।

set(test_source0 ${CMakeTest_SOURCE_DIR}/LibProject/inc/test.h ${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp) 
source_group(TEST FILES ${test_source0}) 

set(test_source1 ${CMakeTest_SOURCE_DIR}/LibProject/inc/test2.h ${CMakeTest_SOURCE_DIR}/LibProject/src/test2.cpp) 
source_group(TEST2 FILES ${test_source1}) 

include_directories(${CMakeTest_SOURCE_DIR}/LibProject/inc) 
add_library(LibProject ${test_source0} ${test_source1}) 

यहाँ मेरा समाधान :)

set(test_header 
${CMakeTest_SOURCE_DIR}/LibProject/inc/test.h) 
set(test_source 
${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp) 

source_group(TEST\\Headers FILES ${test_header}) 
source_group(TEST\\Source FILES ${test_source}) 

set(test2_header 
${CMakeTest_SOURCE_DIR}/LibProject/inc/test2.h) 
set(test2_source 
${CMakeTest_SOURCE_DIR}/LibProject/src/test2.cpp) 
source_group(TEST2\\Headers FILES ${test2_header}) 
source_group(TEST2\\Source FILES ${test2_source}) 

include_directories(${CMakeTest_SOURCE_DIR}/LibProject/inc) 

add_library(LibProject 
${test_header} 
${test_source} 
${test2_header} 
${test2_source}) 
+0

http://stackoverflow.com/questions/27175754/what-are-all-build-and-zero-check-and-do-i-need-them देखें कि ZERO_CHECK और ALL_BUILD क्या हैं। – sashoalm

उत्तर

7

समूह के लिए दृश्य स्टूडियो में एक फ़ोल्डर में फ़ाइलों को आप उपयोग कर सकते हैं:

# Include files 
FILE(GLOB all_headers "include/*.h*") 
source_group("include" FILES ${all_headers}) 

# Source files 
FILE(GLOB all_srcs "src/*.cpp") 
source_group("source" FILES ${all_srcs}) 

यह है कि शामिल फ़ोल्डर में स्थित हैं अपने ज फ़ाइलों के सभी डाल देंगे नामक फ़ोल्डर में प्रदर्शित करने के शामिल दृश्य स्टूडियो में । आपकी सीपीपी फाइलों के लिए वही। यदि आप यही चाहते हैं तो आप सीएमके में अपनी खुद की संरचना बनाने के लिए इस तकनीक का उपयोग कर सकते हैं।

ALL_BUILD और ZERO_CHECK के प्रयोजनों के लिए this answer पढ़ें। ZERO_CHECK की पीढ़ी को अक्षम करने के लिए set(CMAKE_SUPPRESS_REGENERATION true) का उपयोग करें।

और ओपन और DirectX के बीच स्थापना के लिए उचित फ़ोल्डर का चयन करने के लिए, आप ऊपर का इस्तेमाल किया उसी तकनीक का उपयोग, लेकिन उन्हें एक

if(${USE_OPENGL}) 
    FILE(GLOB ....) 
endif() 

मुझे लगता है कि आप विचार प्राप्त अंदर डाल सकते हैं।

+2

जीएलओबी का उपयोग करना शायद सबसे अच्छा विचार नहीं है, क्योंकि अगर फाइलें गायब हैं तो यह आपको कोई त्रुटि नहीं देती है जो परियोजना के लिए महत्वपूर्ण हैं। यदि आप मैन्युअल रूप से सभी फाइलों को सूचीबद्ध करते हैं (मुझे पता है कि बहुत सारे टाइपिंग) सीएमके शिकायत करेगा अगर उसे सूचीबद्ध फाइल नहीं मिलती है। ZERO_CHECK से छुटकारा पाने के लिए – LiMuBei

+0

आप cmake कमांड लाइन पर -DCMAKE_SUPPRESS_REGENERATION = 0 विकल्प पास कर सकते हैं। – davidnr

4

मैं लोगों को मैं जानता हूँ कि जवाब देंगे:

ALL_BUILD और ZERO_CHECK में परिवर्तन के साथ सिंक में अपनी परियोजनाओं को रखने के लिए उपयोग किया जाता है सीएमकेफाइल। मुझे नहीं लगता कि उनसे छुटकारा पाने का कोई तरीका है।

.h फ़ाइलें प्राप्त करने के लिए जहां आप उन्हें चाहते हैं, आपको उन्हें स्रोत के हिस्से के रूप में शामिल करने की आवश्यकता है। मैं इस तरह कुछ उपयोग करता हूं:

file(GLOB LocalProjectIncludes "${yourheaderdirectory}/*.h") 

फिर मैं परियोजना के लिए स्रोत फ़ाइलों में $ {LocalProjectIncludes} जोड़ता हूं। सीएमके को पता चल जाएगा कि वे हेडर हैं; यह उन्हें बनाने की कोशिश नहीं करेगा।

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