विजुअल c ++: # सोल्यूशंस को अन्य प्रोजेक्ट्स से एक ही सॉल्यूशन में फाइल करें


113

मैं विजुअल C ++ का उपयोग कर एक गेम पर काम कर रहा हूं। मेरे पास अलग-अलग परियोजनाओं में कुछ घटक हैं, और उन्होंने परियोजना निर्भरताएं निर्धारित की हैं। मैं किसी भिन्न प्रोजेक्ट से शीर्ष लेख फ़ाइल को #include कैसे करूं? मुझे नहीं पता कि एक परियोजना से दूसरी परियोजना में कक्षाओं का उपयोग कैसे किया जाए।

जवाबों:


199

संकलक के लिए सेटिंग्स

जिस प्रोजेक्ट में आप किसी अन्य प्रोजेक्ट से हेडर फ़ाइल को #include करना चाहते हैं , आपको प्रोजेक्ट कॉन्फ़िगरेशन में हेडर फ़ाइल के पथ को अतिरिक्त शामिल निर्देशिकाएँ अनुभाग में जोड़ना होगा ।

प्रोजेक्ट कॉन्फ़िगरेशन तक पहुँचने के लिए:

  1. प्रोजेक्ट पर राइट-क्लिक करें, और गुण चुनें।
  2. कॉन्फ़िगरेशन गुण चुनें-> C / C ++ -> सामान्य।
  3. अतिरिक्त शामिल निर्देशिकाएँ के तहत पथ सेट करें।

कैसे शामिल करें

शीर्ष लेख फ़ाइल को शामिल करने के लिए , बस अपने कोड में निम्नलिखित लिखें:

#include "filename.h"

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

यदि आप प्रोजेक्ट सेटिंग्स में प्रत्येक हेडर फ़ाइल स्थान नहीं जोड़ना चाहते हैं, तो आप बस एक बिंदु तक एक निर्देशिका शामिल कर सकते हैं, और फिर उस बिंदु के सापेक्ष #include:

// In project settings
Additional Include Directories    ..\..\libroot

// In code
#include "lib1/lib1.h"    // path is relative to libroot
#include "lib2/lib2.h"    // path is relative to libroot

लिंकर के लिए सेटिंग

अगर स्टैटिक लाइब्रेरीज़ (यानी .लिब फ़ाइल) का उपयोग कर रहे हैं, तो आपको लाइब्रेरी को लिंकर इनपुट में जोड़ने की आवश्यकता होगी, ताकि लिंकेज के समय प्रतीकों को लिंक किया जा सके (अन्यथा आपको एक अनसुलझे प्रतीक मिल जाएगा):

  1. प्रोजेक्ट पर राइट-क्लिक करें, और गुण चुनें।
  2. कॉन्फ़िगरेशन गुण चुनें-> लिंकर-> इनपुट
  3. अतिरिक्त निर्भरता के तहत पुस्तकालय दर्ज करें।

6
क्या मैं अभी कह सकता हूं कि एसओ पर इस विषय पर जवाब पढ़ने की एक सुबह के बाद, मैं आपके सामने आया सबसे स्पष्ट और व्यापक में हूं। अच्छा किया और धन्यवाद!
डेविड हॉल

9
अनाम उपयोगकर्ता के रूप में एक सुझाव था, "जब आप लाइब्रेरी के लिए पथ को शामिल करते हैं, तो सुनिश्चित करें कि आप उन्हें उद्धरण में दर्ज करते हैं यदि पथ में स्थान हैं"। इसे टिप्पणी के रूप में जोड़ना, अगर यह किसी की मदद करता है।
iDev

2
एक स्थैतिक पुस्तकालय को शामिल करने का एक अतिरिक्त तरीका है, समाधान की "परियोजना निर्भरता" के भीतर, परियोजना को कॉन्फ़िगर करने के लिए स्थैतिक पुस्तकालय की निर्भरता से जुड़ा होना। यह मुझे यह पता लगाने में लग गया कि मेरी परियोजनाओं में से एक सही ढंग से लिंक क्यों कर रहा है। और दूसरा नहीं था - यही कारण था।
स्टुअर्ट वुड

3
मैं यह बताना चाहूंगा कि अन्य प्रोजेक्ट के सोर्स फाइल डायरेक्टरी के साथ "एडिशनल इंक्लूडड डिरेक्टरीज़" का उपयोग करना एक भयानक विचार हो सकता है। दूसरी परियोजना में समान नाम वाली फाइलें हो सकती हैं (यदि आप प्रत्येक के लिए पूर्व संकलित हेडर का उपयोग कर रहे हैं तो बहुत संभव है)। व्यक्तिगत रूप से, मैं प्रोजेक्ट्स स्रोत फ़ाइलों के मूल फ़ोल्डर को जोड़ना पसंद करता हूं, ताकि आप कम से कम अपने आप को निर्दिष्ट कर सकें, जैसे #include "proj2\include.h"। प्रति समाधान में कई परियोजनाएँ होने के कारण, NET भाषाओं की ओर बहुत निर्देशित होती है, क्योंकि इनका उपयोग बहुत अलग तरीके से किया जाता है। फिर भी सी ++ परियोजनाओं के लिए इसे दूर करने का एक शानदार तरीका खोजने के लिए।
Deji

18
यह थोड़ा संकोची है। VS अपने आप इतना कुछ कर सकता है। इस बात पर यकीन करना मुश्किल है कि रास्ते की हार्ड कोडिंग की तुलना में बेहतर समाधान नहीं है - परियोजना निर्भरता सेटिंग या अच्छा हो सकता है।
कुकी

4

#includeपरियोजनाओं के साथ कुछ नहीं करना है - यह सिर्फ पूर्वप्रोसेसर को बताता है "हेडर फ़ाइल की सामग्री को यहां रखें"। यदि आप इसे एक रास्ता देते हैं जो सही स्थान को इंगित करता है (एक सापेक्ष पथ हो सकता है, जैसे ../your_file.h) इसे सही तरीके से शामिल किया जाएगा।

हालाँकि, आपको ऐसी परियोजनाओं को ठीक से लिंक करने के लिए पुस्तकालयों (स्थिर / गतिशील पुस्तकालयों) के बारे में सीखना होगा - लेकिन यह एक और सवाल है।


3

चूंकि दोनों परियोजनाएं एक ही समाधान के तहत हैं, इसमें शामिल फ़ाइलों और लिंकर के लिए एक सरल तरीका है जैसा कि https://docs.microsoft.com/en-us/cpp/build/adding-references-in-visual-cpp- में वर्णित है। प्रोजेक्ट्स? देखें = बनाम 2019 :

  1. शामिल एक रिश्तेदार पथ (उदाहरण #include "../libProject/libHeader.h") में लिखा जा सकता है ।
  2. लिंकर के लिए, "संदर्भ" पर राइट क्लिक करें, ऐड संदर्भ पर क्लिक करें, और अन्य प्रोजेक्ट चुनें।

अच्छा और सरल, लेकिन यह बहुत बुरा है कि रिश्तेदार पथ की आवश्यकता होती है हर जगह आप एक हेडर शामिल करते हैं।
योयो

2

आपको हेडर में प्रोजेक्ट गुण में पथ सेट करने की आवश्यकता है इसलिए हेडर फ़ाइल (एस) को खोजने की कोशिश करते समय कंपाइलर वहां दिखता है। मुझे सटीक स्थान याद नहीं है, लेकिन परियोजना के गुणों को देखें और आपको इसे देखना चाहिए।


स्थान गुण> C / C ++> सामान्य> अतिरिक्त शामिल निर्देशिकाएँ के अंतर्गत हो सकता है।
मुस्तफा केमल

0

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


0

@ बेनव के जवाब पर विस्तार करते हुए, मेरा पसंदीदा तरीका यह है:

  1. समाधान निर्देशिका को अपने शामिल पथों में जोड़ें:
    • समाधान एक्सप्लोरर में अपनी परियोजना पर राइट क्लिक करें
    • गुण चुनें
    • ड्रॉप-डाउन से सभी कॉन्फ़िगरेशन और सभी प्लेटफ़ॉर्म चुनें
    • C / C ++> General चुनें
    • $(SolutionDir)अतिरिक्त शामिल निर्देशिकाओं में जोड़ें
  2. आपके द्वारा उपयोग की जाने वाली प्रत्येक परियोजना के संदर्भ जोड़ें:
    • समाधान एक्सप्लोरर में अपनी परियोजना के संदर्भ पर राइट क्लिक करें
    • संदर्भ जोड़ें का चयन करें ...
    • उस परियोजना का चयन करें जिसे आप संदर्भित करना चाहते हैं

अब आप अपनी संदर्भित परियोजनाओं जैसे कि हेडर को शामिल कर सकते हैं:

#include "OtherProject/Header.h"

टिप्पणियाँ:

  • यह मानता है कि आपकी समाधान फ़ाइल आपके प्रत्येक प्रोजेक्ट से एक फ़ोल्डर संग्रहीत है, जो विज़ुअल स्टूडियो के साथ प्रोजेक्ट बनाते समय डिफ़ॉल्ट संगठन है।
  • अब आप समाधान फ़ोल्डर के लिए पथ के किसी भी फ़ाइल को शामिल कर सकते हैं , जो वांछनीय नहीं हो सकता है, लेकिन दृष्टिकोण की सादगी के लिए मैं इसके लिए ठीक हूं।
  • चरण 2 #includes के लिए आवश्यक नहीं है , लेकिन यह सही बिल्ड निर्भरता सेट करता है, जो आप चाहते हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.