ভিজ্যুয়াল সি ++: # একই সমাধানে অন্যান্য প্রকল্পের ফাইল অন্তর্ভুক্ত করুন


113

আমি ভিজ্যুয়াল সি ++ ব্যবহার করে একটি গেমের সাথে কাজ করছি। আমার পৃথক প্রকল্পে কিছু উপাদান রয়েছে এবং আমি প্রকল্পের নির্ভরতা নির্ধারণ করেছি। আমি কীভাবে একটি আলাদা প্রকল্প থেকে একটি শিরোলেখ ফাইল অন্তর্ভুক্ত করব? অন্য প্রকল্পের ক্লাস কীভাবে ব্যবহার করতে হয় সে সম্পর্কে আমার কোনও ধারণা নেই।

উত্তর:


199

সংকলক জন্য সেটিংস

যে প্রকল্পে আপনি অন্য প্রকল্প থেকে শিরোনাম ফাইলটি # অন্তর্ভুক্ত করতে চান সেখানে আপনাকে প্রকল্পের কনফিগারেশনের অতিরিক্ত অন্তর্ভুক্ত ডিরেক্টরি বিভাগে শিরোলেখ ফাইলটির পথ যুক্ত করতে হবে ।

প্রকল্প কনফিগারেশন অ্যাক্সেস করতে:

  1. প্রকল্পে ডান ক্লিক করুন, এবং বৈশিষ্ট্য নির্বাচন করুন।
  2. কনফিগারেশন বৈশিষ্ট্য নির্বাচন করুন -> সি / সি ++ -> সাধারণ।
  3. অতিরিক্ত অন্তর্ভুক্ত ডিরেক্টরিতে পথ নির্ধারণ করুন।

কীভাবে অন্তর্ভুক্ত করা যায়

করতে হেডার ফাইলের অন্তর্ভুক্ত , কেবল আপনার কোডে নিম্নলিখিত লিখুন:

#include "filename.h"

মনে রাখবেন যে আপনাকে এখানে পাথ নির্দিষ্ট করার দরকার নেই, কারণ আপনি ইতিমধ্যে অতিরিক্ত অন্তর্ভুক্ত ডিরেক্টরিতে ডিরেক্টরিটি অন্তর্ভুক্ত করেছেন, সুতরাং ভিজুয়াল স্টুডিওটি কোথায় এটি সন্ধান করবে তা জানতে পারবে।

আপনি যদি প্রকল্পের সেটিংসে প্রতিটি শিরোনাম ফাইলের অবস্থান যুক্ত করতে না চান তবে আপনি কেবলমাত্র একটি বিন্দু পর্যন্ত একটি ডিরেক্টরি অন্তর্ভুক্ত করতে পারেন এবং তারপরে # সেই বিন্দুতে অন্তর্ভুক্ত করুন:

// 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
বেনামে ব্যবহারকারীর কাছ থেকে একটি পরামর্শ ছিল, "আপনি যখন লাইব্রেরির জন্য পথটি অন্তর্ভুক্ত করবেন তখন নিশ্চিত করুন যে আপনি যদি সেই পথের ফাঁক করে থাকেন তবে আপনি উক্তগুলিকে উদ্ধৃতিতে প্রবেশ করেছেন"। এটিকে মন্তব্য হিসাবে যুক্ত করা, যদি এটি কাউকে সহায়তা করে।
আইডিএভ

2
স্ট্যাটিক লাইব্রেরি অন্তর্ভুক্ত করার একটি অতিরিক্ত উপায় হ'ল সমাধানের "প্রকল্প নির্ভরতা" এর মধ্যে, প্রকল্পটি সংযুক্ত হওয়ার জন্য স্থির লাইব্রেরির নির্ভরতা হতে কনফিগার করা my আমার প্রকল্পগুলির মধ্যে একটি কেন সঠিকভাবে সংযোগ স্থাপন করছে তা নির্ধারণ করতে আমার বয়স হতে হয়েছিল me এবং অন্যটি ছিল না - এ কারণেই।
স্টুয়ার্ট উড

3
আমি উল্লেখ করতে চাই যে অন্যান্য প্রকল্পের উত্স ফাইল ডিরেক্টরিটির সাথে "অতিরিক্ত অন্তর্ভুক্ত ডিরেক্টরিগুলি" ব্যবহার করা একটি ভয়ানক ধারণা হতে পারে। অন্যান্য প্রকল্পে একই নামের ফাইল থাকতে পারে (খুব সম্ভবত আপনি যদি প্রতিটিটির জন্য প্রাক-সংকলিত শিরোনাম ব্যবহার করছেন)। ব্যক্তিগতভাবে, আমি প্রকল্পগুলির উত্স ফাইলগুলির মূল ফোল্ডারটি যুক্ত করতে পছন্দ করি, যাতে আপনি কমপক্ষে নিজেকে নির্দিষ্ট করতে পারেন, যেমন #include "proj2\include.h"। সমাধানের জন্য একাধিক প্রকল্প নেওয়া নেট ভাষার পক্ষে খুব নির্দেশিত বলে মনে হয়, কারণ সেগুলি খুব আলাদাভাবে ব্যবহৃত হয়। তবুও সি ++ প্রকল্পগুলির জন্য এটি অতিক্রম করার দুর্দান্ত উপায় খুঁজে বের করতে।
দেজি

18
এটি কিছুটা স্বল্প। ভিএস স্বয়ংক্রিয়ভাবে এত কিছু করতে পারে। এই পথে কঠিন কোডিংয়ের তুলনায় এর চেয়ে ভাল সমাধান আর নেই - প্রকল্প নির্ভরতা সেটিং বা এর মতো পছন্দটি চমৎকার হতে পারে Hard
কুকি

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. লিঙ্কারের জন্য, "রেফারেন্সগুলি" এ ডান ক্লিক করুন, অ্যাড রেফারেন্স ক্লিক করুন এবং অন্য প্রকল্পটি চয়ন করুন।

দুর্দান্ত এবং সহজ, তবে এটি খুব খারাপ যে আপনি যেখানে শিরোনাম অন্তর্ভুক্ত করেন সেখানে path
yoyo

2

আপনাকে প্রকল্পের বৈশিষ্ট্যগুলিতে শিরোনামের পথ নির্ধারণ করতে হবে যাতে শিরোনাম ফাইল (গুলি) সন্ধান করার সময় সংকলকটি সেখানে দেখায়। আমি সঠিক অবস্থানটি মনে করতে পারি না, তবে প্রকল্পের বৈশিষ্ট্যগুলি দেখতে এবং আপনার এটি দেখতে হবে।


অবস্থান বৈশিষ্ট্য> সি / সি ++> সাধারণ> অতিরিক্ত অন্তর্ভুক্ত ডিরেক্টরিতে থাকতে পারে।
মোস্তফা কামাল

0

# অন্তর্ভুক্ত নির্দেশিকায় সম্পূর্ণ পথের রেফারেন্স এড়ানোর চেষ্টা করুন, তারা নিখুঁত বা আপেক্ষিক কিনা। পরিবর্তে, আপনার প্রকল্প সেটিংসে অন্য প্রকল্পের অন্তর্ভুক্ত ফোল্ডারের অবস্থান যুক্ত করুন। প্রয়োজন হলে পাথের রেফারেন্সগুলিতে কেবল সাবফোল্ডার ব্যবহার করুন। এইভাবে, আপনার কোড আপডেট না করে জিনিসগুলি প্রায় সরানো সহজ।


0

@ বেনাভের উত্তরটি প্রসারিত করে আমার পছন্দের পদ্ধতির প্রতি:

  1. আপনার অন্তর্ভুক্ত পাথগুলিতে সমাধান ডিরেক্টরি যুক্ত করুন:
    • সমাধান এক্সপ্লোরারটিতে আপনার প্রকল্পে ডান ক্লিক করুন
    • বৈশিষ্ট্য নির্বাচন করুন
    • ড্রপ-ডাউনগুলি থেকে সমস্ত কনফিগারেশন এবং সমস্ত প্ল্যাটফর্ম নির্বাচন করুন
    • সি / সি ++> সাধারণ নির্বাচন করুন
    • যোগ $(SolutionDir)অতিরিক্ত থেকে ডিরেক্টরি অন্তর্ভুক্ত করুন
  2. আপনি যে প্রতিটি প্রকল্প ব্যবহার করতে চান তার রেফারেন্স যুক্ত করুন:
    • সমাধান এক্সপ্লোরারটিতে আপনার প্রকল্পের রেফারেন্সগুলিতে ডান ক্লিক করুন
    • রেফারেন্স যুক্ত নির্বাচন করুন ...
    • আপনি যে প্রকল্পটি উল্লেখ করতে চান তা নির্বাচন করুন

এখন আপনি আপনার উল্লেখযোগ্য প্রকল্পগুলির শিরোনামগুলি অন্তর্ভুক্ত করতে পারেন:

#include "OtherProject/Header.h"

মন্তব্য:

  • এটি ধরে নিয়েছে যে আপনার সলিউশন ফাইলটি আপনার প্রতিটি প্রকল্পের একটি ফোল্ডার সঞ্চিত রয়েছে, যা ভিজ্যুয়াল স্টুডিওতে প্রকল্পগুলি তৈরি করার সময় ডিফল্ট সংস্থা।
  • সমাধান ফোল্ডারের তুলনায় আপনি এখন কোনও ফাইল অন্তর্ভুক্ত করতে পারেন, এটি পছন্দসই নয় তবে পদ্ধতির সরলতার জন্য আমি এর সাথে ঠিক আছি।
  • পদক্ষেপ 2 এর জন্য প্রয়োজনীয় নয় #include, তবে এটি সঠিক বিল্ড নির্ভরতা নির্ধারণ করে যা আপনি সম্ভবত চান want
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.