फ़ाइल पेड़ को देखते हुए:

DLL1
└───source
    ├───File1.h
    └───SameHeader.h
DLL2
└───source
    ├───File2.h
    └───SameHeader.h

File1 में SameHeader.h शामिल है, जो ठीक है। File2 में File1 शामिल है जो संकलित नहीं होगा, क्योंकि #include "SameHeader.h" अब DLL2/source/SameHeader.h को इंगित करता है। क्या यह सुनिश्चित करने का कोई तरीका है कि File1 उसी dll में फ़ाइल का उपयोग करता है?

1
user12067300 14 सितंबर 2019, 17:25

1 उत्तर

सबसे बढ़िया उत्तर

ज़रूर - आप फ़ाइल SameHeader.h को एक अलग फ़ोल्डर में रख सकते हैं (स्रोत फ़ाइलों के समान नहीं) और फिर उस फ़ोल्डर को अपनी सूची में खोज करने के लिए पथ शामिल करें (प्रोजेक्ट विकल्पों में, या कंपाइलर कमांड स्विच में) निर्दिष्ट करें )

बेशक, आपको प्रत्येक स्रोत प्रोजेक्ट निर्देशिका से फ़ाइल SameHeader.h को हटाने की आवश्यकता होगी, या जिसे अलग फ़ोल्डर में से एक के लिए वरीयता में उपयोग किया जाएगा।

तो, आपके "फाइल ट्री" आरेख का उपयोग करते हुए, मैं यह सुझाव दूंगा:

DLL1
└───source
├───File1.h
DLL2
└───source
├───File2.h
Include
└───SameHeader.h

फिर आप अपने कंपाइलर के फ़ाइल खोज पथ में ../Include जोड़ सकते हैं। यह कैसे करना है यह आपके कंपाइलर और/या पर्यावरण पर निर्भर करता है, लेकिन यह एमएसवीसी में /I"..\_Include" स्विच या क्लैंग के साथ (शायद) -I"../_Include" की तर्ज पर कुछ होगा। मल्टी-प्रोजेक्ट सॉल्यूशंस में मैं यही करता हूं, सभी हेडर फाइलों के लिए जिनका उपयोग एक से अधिक प्रोजेक्ट द्वारा किया जाएगा।

हालांकि, अगर आपको वास्तव में दो (अलग-अलग) SameHeader.h फाइलों की जरूरत है, तो आपको शायद फाइल1 में #include "SameHeader.h" लाइन में पूरा पथ नाम (या, कम से कम, एक योग्य पथ) निर्दिष्ट करना चाहिए - कुछ इस तरह: #include "../../DLL1/source/SameHeader.h" (आपकी फ़ाइलों और फ़ोल्डरों के सटीक लेआउट के आधार पर)।

-1
Adrian Mole 14 सितंबर 2019, 21:05