2011-10-14 16 views
14

मेरी क्यूटी परियोजना में एक ही नाम के साथ दो स्रोत फाइलें हैं लेकिन विभिन्न फ़ोल्डर में हैं। समर्थक फ़ाइल है:qmake का उपयोग दो स्रोत फ़ाइलों के साथ कैसे करें, जिनका नाम समान है?

SOURCES = A/Test.cpp 
SOURCES += B/Test.cpp 

यह क्यूटी दृश्य स्टूडियो ऐड-ऑन के माध्यम से दृश्य स्टूडियो समाधान फ़ाइल उत्पन्न कर सकते हैं, लेकिन यह काम नहीं करेगा क्योंकि उत्पन्न वस्तु फ़ाइल एक ही नाम है: Test.obj। इससे एलएनके 2001 अनसुलझा बाहरी प्रतीक होगा क्योंकि Test.obj में से एक ओवरराइट किया गया है।

इससे निपटने के लिए उचित प्रो फ़ाइल कैसे लिखें?

उत्तर

4

आपको कई परियोजनाओं में अपने समाधान को विभाजित करने पर विचार करना चाहिए, लेकिन यह निर्भर करता है कि उनमें से प्रत्येक फ़ोल्डर एक परियोजना का प्रतिनिधित्व कर सकता है। यदि आप इस समाधान को चुनते हैं, तो आपको प्रति परियोजना एक .pro फ़ाइल लिखनी होगी। जाने के लिए हमेशा की तरह लिखना है एक 'सामान्य' * जो हर * .pro फ़ाइल से शामिल किया गया है .pri फ़ाइल:

folder1.pro

TEMPLATE=lib 
TARGET=folder1 
include(../common.pri) 

folder2.pro

TEMPLATE=lib 
TARGET=folder2 
include(../common.pri) 

common.pri (मूल निर्देशिका में)

SOURCES += *.cpp 
HEADERS += *.h 
# etc. 

स्पष्ट रूप से प्रत्येक प्रो फ़ाइल की सामग्री आपके समाधान पर निर्भर करती है।

यदि आप कई परियोजनाओं में स्रोत फ़ाइलों को विभाजित नहीं करना चाहते हैं, तो आसान समाधान एक विवादित फ़ाइलों का नाम बदलना होगा, मुझे लगता है।

13

आप अपने .pro फाइल करने के लिए है कि लाइन जोड़ने की कोशिश कर सकते हैं:

CONFIG += object_with_source 

लेकिन जैसे विकल्प नाम का तात्पर्य, .obj फ़ाइलें बाहर के स्रोत/"छाया का निर्माण" में नहीं बनाया जाएगा निर्देशिका।

उस विकल्प को object_parallel_to_source द्वारा क्यूटी 5 में बदल दिया गया है, जो छाया निर्माण के साथ काम करना चाहिए।

+2

नोट: यह सुविधा हटा दिया गया है, http://qt.gitorious.org/qt/qtbase/commit/a72420d012fd09f0a79ae75b77eb1c3bbff75669/diffs –

+0

हटाने के लिए नए पते के लिए प्रतिबद्ध: http://code.qt.io/cgit/ क्यूटी/qtbase.git/प्रतिबद्ध /? id = a72420d012fd09f0a79ae75b77eb1c3bbff75669 – SGaist

0

मैं हाल ही में इस मुद्दे पर भी आया हूं। प्रोजेक्ट को सबप्रोजेक्ट्स में विभाजित करने से सबकुछ अधिक जटिल हो गया है, और कम से कम मेरे पहले प्रयास पर- फ्लैट-आउट काम नहीं किया। तब मैंने CONFIG += object_with_source और CONFIG += object_parallel_to_source की कोशिश की, लेकिन दोनों मेरे क्यूटी संस्करण के साथ काम नहीं कर रहे थे।

तो यह मैं कैसे इसे हल है (दृश्य स्टूडियो 2010 के लिए, मैं नहीं जानता कि अगर काम करता है अन्य संस्करणों के साथ एक ही):

तो परियोजना एक साधारण दृश्य स्टूडियो परियोजना, नहीं एक qmake द्वारा उत्पन्न थे , आप यहां वर्णित अनुसार इसे हल कर सकते हैं: Visual Studio 2010 & 2008 can't handle source files with identical names in different folders? (परियोजना सेटिंग्स "सी/सी ++"> "आउटपुट फ़ाइलें"> "ऑब्जेक्ट फ़ाइल नाम") में %(RelativeDir) को जोड़कर ऑब्जेक्ट फ़ाइलों के आउटपुट डीआईआर को रिश्तेदार डीआईआर में बदलना।

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

import sys 

filename = sys.argv[1] 
f = open(filename, "r", -1, "utf-8-sig") 
lines = f.readlines() 
f.close() 
f = open(filename, "w", -1, "utf-8-sig") 
for line in lines: 
    line = line.replace("</ObjectFileName>", "%(RelativeDir)\</ObjectFileName>") 
    f.write(line) 
f.close() 

..और मेरे बल्ले-फाइल में इस तरह इसका इस्तेमाल कि मैं हमेशा दृश्य स्टूडियो प्रोजेक्ट बनाने के लिए फोन:

qmake -tp vc myproject.pro 
@cd ../scripts 
unflatten_vcproj_obj_output.py "../src/myproject.vcxproj" 
@pause 

तो मैं इस अजगर पटकथा लिखी एक सुंदर समाधान नहीं है, लेकिन यह काम करता है।

1

एक समाधान फ़ाइलों का नाम बदलना है:

A/a_Test.cpp 
B/b_Test.cpp 

यह थोड़ा बदसूरत है, लेकिन इसकी सरल और वर्ग के नाम एक ही रह सकते हैं।

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