সি ++ এর জন্য ম্যাভেনের মতো নির্ভরতা ব্যবস্থাপনা? [বন্ধ]


95

বলুন আমার কাছে একটি সি ++ প্রকল্প রয়েছে যা বেশ কয়েকটি সাব-প্রকল্পে বিভক্ত। সাবপ্রজেক্টটি সমস্ত একটি ডিএলএল উত্পাদন করে এবং বিকাশকারীদের বিভিন্ন টিম প্রতিটি প্রকল্পের উপর কাজ করে। এখন যদি আমি মূল প্রকল্পটি তৈরি করতে চাই, তবে নিজের দ্বারা সমস্ত উপ-প্রকল্পগুলি নির্মাণ করা এড়াবার কোনও উপায় আছে?

সংক্ষেপে, আমি এমন কিছু খুঁজছি যা নির্ভরতা পরিচালনার (যেমন বাইনারি ফাইল এবং শিরোনামের জন্য) মাভেন জাভার মতো করে।

আসলে, আমি এর জন্য ম্যাভেনকে ব্যবহার করার চেষ্টা করেছি তবে এটি বরং জটিল because এছাড়াও, সংকলনটি চালানো হ্যাক হ'ল কিছুটা কারণ আমাকে মাভেনের মধ্যে থেকে ন্যান্টকে কল করতে হবে (আমি সরাসরি ভিজ্যুয়াল স্টুডিও সমাধানগুলি তৈরি করতে ন্যান্টের বৈশিষ্ট্যটি ব্যবহার করি)।

এটি করার কোনও ইঙ্গিত এবং ধারণা?


মেক ব্যবহার করার সময় সমস্যাটি হ'ল আমাকে কমপক্ষে একবারে সবকিছু তৈরি করতে হবে এবং তাই নির্ভরতার জন্য উত্স ফাইলগুলিরও দরকার। বিশেষত, নির্ভরশীল লাইব্রেরিগুলি পুনর্নির্মাণ করার সময়, এটি খুব সময় সাশ্রয়ী এবং মারাত্মক প্রভাব উত্পাদনশীলতা হতে পারে। নাকি আমি কিছু মিস করছি?
ওয়েবস্টার

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

এটি প্রায় 10 বছর দেরিতে তাই এখানে 3 টি সম্ভাবনা রয়েছে: আপনি অপব্যবহার করছেন maven, আপনি পুরো বিন্দুটি হারিয়ে যাচ্ছেন mavenবা 10 বছর আগে আমি যখন mavenসি ++ ব্যবহার করছিলাম না তখন এটি সি ++ এর জন্য খুব কম কার্যকর ছিল। আমি ২০০৯-এর জন্য কথা বলতে পারি না, তবে সাম্প্রতিক বছরগুলিতে অভিজ্ঞতা থেকে mavenআপনি ঠিক যে সমস্যাটি বর্ণনা করছেন তার জন্য আপনি এটি ব্যবহার করবেন। এটি আপনি যা চান ঠিক তেমন কার্যকরভাবে এবং ভাল করে এবং আপনার দাবী করা নেতিবাচক কাজগুলি তা করে না। 2019 বা তার পরের যে কেউ এটি পড়ছেন তাদের mavenএই উদ্দেশ্যে ব্যবহার করার জন্য দৃ strongly়তার সাথে বিবেচনা করা উচিত ।
searchengine27

উত্তর:


37

প্রাথমিক উত্তর : আমি সিএমকে ব্যবহার করার পরামর্শ দেব। এটি একটি মাল্টি-প্ল্যাটফর্ম মেক ফাইল জেনারেটর (ভিজ্যুয়াল স্টুডিও বা এক্সলিপস সিডিটি প্রকল্পগুলিও উত্পন্ন করে)।

http://www.cmake.org/

আমি এটি দিয়ে সত্যিই ভাল অভিজ্ঞতা করেছি। আমি এটি সম্পর্কে সবচেয়ে ভাল জিনিসটি জেনেরিক প্রকল্প কাঠামো উত্পাদন করার ক্ষমতা ছিল ability সুতরাং আপনি প্রতিবার স্ক্রিপ্ট পরিবর্তন না করেই ইউনিট টেস্ট ইত্যাদির জন্য সাব-প্রজেক্টগুলি লুক-আপ অন্তর্ভুক্ত করতে পারেন।

প্রকল্পের জন্য প্রয়োজনীয় প্রাক-ইনস্টলড বিল্ড গ্রন্থাগারগুলি কীভাবে সন্ধান করতে হয় সে সম্পর্কে তাদের প্রচুর মডিউল রয়েছে (যেমন বুস্ট, কিউটি ইত্যাদি)


আপডেট : মধ্য সময়ে সি ++ এর জন্য প্যাকেজ পরিচালনা প্রবর্তনের জন্য কিছু প্রচেষ্টা ছিল effort কিছু প্রকল্প দেখার জন্য:

  • conan.io বড় বিল্ড সরঞ্জামগুলির সাথে সংহত করে:
    • সিএমকে
    • ভিসুয়াল স্টুডিও
    • মেকফিল
    • এক্সকোড
    • ...
  • সিপিএমের CMake উপর ভিত্তি করে ( নোট সিপিএম সক্রিয় ভাবে নিয়ন্ত্রিত হচ্ছে না।)
  • বকরু

মন্তব্যগুলিতে @RAM দ্বারা নির্দেশিত হিসাবে নোট সিপিএম আর সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হবে না।


7
আমি কয়েক মাস আগে সিএমকে ব্যবহার করেছি এবং প্রকৃতপক্ষে, প্রাক ইনস্টলড লাইব্রেরিগুলির জন্য পরীক্ষা করা খুব সুন্দরভাবে কাজ করেছে। তবে অন্যান্য বাইনারি নির্ভরতা (যেমন আমার সাবপ্রজেক্টগুলি থেকে আসাগুলি) সহজেই পরিচালনা করা যায়নি। আমি কিছু অনুপস্থিত করছি?
ওয়েবারস্টে

4
@ ওয়েবারস্টে, আসলে সি / সি ++ এর মতো কোনও ম্যাভেনের মতো সরঞ্জাম নেই। বিকাশকারীরা অ্যাপ-গেট লাইনের সরঞ্জামের সাথে নির্ভরতা পরিচালনার চেষ্টা করে।
সানিশাহ

4
সিপিএম সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয় না এবং 2015 এর প্রথম দিক থেকে মারা গেছে
রাম

@ র্যাম: এটি নির্দেশ করার জন্য ধন্যবাদ। আমি আপনাকে রেফারেন্স সহ পোস্টে একটি নোট যুক্ত করেছি।
ওভেনস

4
সিএমকে হ'ল একটি বিল্ড সিস্টেম যা নির্ভরতা সন্ধানের সীমিত ক্ষমতা সহ। এটি এনপিএম, কার্গো ইত্যাদির অর্থে নির্ভরতা ব্যবস্থাপক নয়
এসডিজিএফএসডিএইচ

17

নির্ভরতা ব্যবস্থাপনার জন্য, এটি একটি নতুন প্রকল্প (এটি একটি স্টার্টআপ সংস্থা) বিদ্যমান যা এই ধরণের সরঞ্জামটি প্রয়োগ করছে: https://github.com/biicode (একটি সি ++ নির্ভরতা পরিচালক)। আপনি আপনার নির্ভরতা যুক্ত করতে পারেন এবং এটি কাজ করা উচিত।

বর্তমানে, প্রকল্পটির নাম কনান.আইও , তারা জেএফগ্রোগ দ্বারা অধিগ্রহণ করেছে

আপডেট: প্রকল্পটি মারা গেছে ... দুর্ভাগ্যক্রমে, দেখে মনে হচ্ছে প্রারম্ভিক পর্যায়ে প্রিমিয়াম প্রদানকারী গ্রাহকরা পাবেন না, তবে সার্ভারটি ঠিকঠাক কাজ করছে বলে মনে হচ্ছে ...

UPDATE2: দেখে মনে হচ্ছে কোনো বিকল্প প্রকল্প: conan.io (ধন্যবাদ @mucaho)


আমি লিঙ্কটি সরাতে পারি .. প্রকল্পটি বন্ধ ছিল, এখন এটি কনান.ও
কার্লোস.বায়েজ

আপডেটের জন্য ধন্যবাদ! আমি বেশিরভাগই কৌতুহলের বাইরে তাকিয়ে আছি, দেখে মনে হচ্ছে ডকুমেন্টেশনের জন্য তাদের গিথুবকে ঘিরে ফেলা সম্ভব ; এটি সম্ভবত এক পর্যায়ে ওয়েবসাইটে যা ছিল তার চেয়ে সুন্দর নয় তবে আমার ধারণা এটি কোনও কিছুর চেয়ে ভাল। শুধু ভাবছি, কনান.ইও কি কেবল একটি ব্র্যাব্রেন্ড বা এটি সম্পূর্ণ আলাদা পণ্য?
জুন

4
রিব্র্যান্ড নয়, সমস্ত শিক্ষার সাথে স্ক্র্যাচ থেকে সম্পূর্ণ নতুন প্রকল্প: সম্পূর্ণ ওপেন সোর্স, ঘরে বসে সার্ভারের সাথে সম্পূর্ণ বিকেন্দ্রীভূত, সমস্ত বিল্ড-সিস্টেমকে সমর্থন করে, বাইনারি পরিচালনা করে manage
drodri

8

আমি নিম্নলিখিত উচ্চ-স্তরের বিল্ড সিস্টেমগুলি সুপারিশ করি:


মাভেন নার প্লাগইন ভাল সমর্থন পাচ্ছে। আমি এটি ব্যবহার করেছি এবং আমি এখনও পর্যন্ত পছন্দ করি। তবে আপনার বুঝতে হবে যে মোন রেপোর পক্ষে মাভেন ভাল নয়। বেশিরভাগ সি ++ সলিউশনের জন্য একটি মনো রেপো হ্যান্ডেল শেয়ার লাইব্রেরি এবং এই জাতীয় প্রয়োজন।
হ্যান্স

5

আপনি যদি কেবল নির্ভরশীলতা পরিচালনা চান, আইভির চেষ্টা করুন , এটি পিঁপড়ার সাথে দুর্দান্তভাবে সংহত করে (এবং আমি ধরে নিই আইএনটি আইভির সাইট থেকে লিঙ্কযুক্ত এই ব্লগের উপর ভিত্তি করে ন্যান্ট একই কাজ করতে পারে )।

এছাড়াও আছে বেলডান , মাভেনের একটি নেট সংস্করণ। আপনার পক্ষে এটি কতটা ভাল কাজ করবে তা জানেন না।


3

সত্যিই ভাল নির্ভরতা পরীক্ষা করার জন্য মেক এবং জিসিসি একটি দুর্দান্ত কম্বো।

জিসিসি স্বয়ংক্রিয়ভাবে 'মেক' নির্ভরতা ফাইল তৈরি করতে পারে (-এমডি কমান্ডলাইন সুইচ), যাতে প্রদত্ত শিরোনামের উপর নির্ভর করে সমস্ত উত্স ফাইলগুলি পুনরায় তৈরি করতে সক্ষম হতে পারে।

আমার কিছু সাধারণ নিয়ম রয়েছে যা আমি আমার মেকফিলগুলিতে কাটা-এন-পেস্ট করি:

# compile c files   
%.o:    %.c
    ${CC} ${CFLAGS} -c $< -MD -MF $(<:%.c=%.dep) -o $@

# compile c++ files
%.opp:  %.cpp
    ${CPP} ${CPPFLAGS} -c $< -MD -MF $(<:%.cpp=%.dep) -o $@

এখন যদি আপনার অবজেক্ট ফাইলগুলি ঘোষিত হয় তবে একটি ওবিজে_সি এবং একটি ওবিজে_সিপিপি তালিকা বলুন:

.PHONY: cleandep
cleandep:
    rm -f $(OBJ_C:%.o=%.dep) $(OBJ_CPP:%.opp=%.dep)

-include $(OBJ_C:%.o=%.dep) $(OBJ_CPP:%.opp=%.dep)

অন্যান্য প্রকল্পের সাথে অবশ্যই নির্ভরতা ট্র্যাক করতে পারেন এবং যেমন, যেমন একটি ভাগ করে নেওয়া লিবারিও প্রয়োজনীয় হিসাবে পুনর্নির্মাণও।

উদাহরণস্বরূপ, যদি আপনার অন্যান্য দলগুলি সর্বদা কিছু ভাগ করা ফোল্ডারে তাদের সর্বশেষ ডিএলএল রাখে:

myapp: ${SRC_CPP} ${LIB_DIR}other_team.lib
  ...

${LIB_DIR}other_team.lib: /shared_folder/latest/other_team.lib
  cp /shared_folder/latest/other_team.lib ${LIB_DIR}other_team.lib

এই সমাধানের সাথে আমার উদ্বেগ সম্পর্কিত প্রশ্নের সাথে আমার মন্তব্য যুক্ত হওয়া দেখুন
ওয়েবারস্ট

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

${CC} ${CFLAGS} -c $< -MD -MF $(<:%.c=%.dep) -o $@এই সমস্ত মেক চিহ্নগুলি বিশ্লেষণ করতে আমার বেশ কষ্ট হয়েছিল, এটি দেখে মনে হচ্ছে g++ -c main.cc -MD -MF testএটির কোনও কিছুর সমাধান হয়েছে যদি আপনি এটি কমান্ড লাইনে এককভাবে চালাতে চান এবং ফলাফলটি 'টেস্ট' নামক কোনও ফাইলে রাখে।
জুন


2

আমি কনানকে সুপারিশ করছি , যা আমি এই দিনগুলিতে ব্যবহার করছিলাম। আপনার প্রকল্পের সমস্ত নির্ভরশীল লাইব্রেরি এবং বাইনারিগুলি বজায় রাখা এটি খুব শক্তিশালী।


1

আপনি ব্যবহৃত লাইব্রেরির জন্য নিউগেট প্যাকেজ তৈরি করতে পারেন এবং নির্ভরতা পরিচালনার জন্য নুগেট ব্যবহার করতে পারেন।

সি ++ এর জন্য নিউগেটও দেখুন



@ কঠিন, এটি স্ট্যান্ডেলোন নির্ভরতা পরিচালন হিসাবেও ব্যবহার করা যেতে পারে। (4 এম এক্সিকিউটেবল ফাইল)
ইউসু আলেয়াউব

0

এসসিএসের শীর্ষে বসে বেশ কয়েকটি সরঞ্জাম রয়েছে, অটোটুলের মতো উচ্চ স্তরের কার্যকারিতা সরবরাহ করে যা বিকাশকারীদের জীবনকে আরও সহজ করার চেষ্টা করছে (যেমন ডাব্লুএএফ, এসএনওসিএস)। দুর্ভাগ্যক্রমে, বড় বড় প্রকল্পগুলির জন্য দীর্ঘ সময় সংকলনের সময় - স্ক্যানস নিজেই এর বড় অপূর্ণতা রয়েছে।

আমি এসএনওএসএস চেষ্টা করে দেখতে সুপারিশ করতে পারি যারা একটি সহজ নির্ভরতা পরিচালনা খুঁজছেন এবং একক কমান্ডে সংকলনের বিকল্পগুলি বেছে নিয়েছেন তাদের জন্য (যা একটি স্ক্যানস বিপরীত হয়েছে) (সংকলক, x86 / x64, ডিবাগ / রিলিজ, স্ট্যাটিক / শেয়ার্ড লাইব্রেরি, পরীক্ষা / লক্ষ্যগুলি ইনস্টল করুন ইত্যাদি)।

এসএনওসিএস পৃথক ফাইলগুলিতে প্রজেক্ট কনফিগারেশন আউটপুট সংরক্ষণ করে দীর্ঘ সংকলন সময়ের সমস্যার মোকাবিলার চেষ্টা করে যা ফলস্বরূপ বিল্ডসগুলি সম্পূর্ণরূপে কনফিগারেশন পর্ব এড়িয়ে যেতে এবং সরাসরি বিল্ডিং পর্বে যেতে দেয় (শেষ বৈশিষ্ট্যটি এখন নির্মাণাধীন)

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


-1

এসসিএন চেষ্টা করুন

স্ক্যানস হ'ল একটি ওপেন সোর্স সফ্টওয়্যার নির্মাণ সরঞ্জাম — যা পরবর্তী প্রজন্মের বিল্ড সরঞ্জাম। স্কোনসকে অটোকনফ / অটোমেক এবং সাইকেলের মতো সংকলক ক্যাশেগুলির অনুরূপ সমন্বিত কার্যকারিতা সহ ক্লাসিক মেক ইউটিলিটির জন্য উন্নত, ক্রস প্ল্যাটফর্ম বিকল্প হিসাবে ভাবেন। সংক্ষেপে, স্ক্যানস হ'ল সফটওয়্যার তৈরির একটি সহজ, আরও নির্ভরযোগ্য এবং দ্রুত উপায়।


4
স্ক্যানদের নির্ভরতা পরিচালনা বা অনুরোধের মতো ভান্ডারগুলির মধ্যে কোনও বিল্ট নেই।
ম্যাক্সিমাম ভাইয়ারগিউজ

-4

আমি সমস্ত বিল্ড নির্ভরতা সিস্টেমের মাকে ব্যবহার করার পরামর্শ দিচ্ছি: তৈরি করুন।


আমি এটি ব্যাপকভাবে ব্যবহার। জিসিসি নির্ভরতা ফাইলগুলি তৈরি করতে পারে যা 'তৈরি' খেতে পারে। অন্য উত্তরের জন্য যথেষ্ট, সম্ভবত ...
উইল

8
মেক আসলেই বিল্ড
অটোমেশন-

-6

স্কোনগুলি ব্যবহার করে দেখুন, আপনাকে আটকানো হবে। মেক পুরানো, কঠিন এবং বজায় রাখা ব্যয়বহুল।


আমার স্ক্যানস দেখে ছিল তবে বাইনারি নির্ভরতাগুলি পরিচালনা করার উপায় খুঁজে পেল না। আপনি কি এই জন্য একটি উদাহরণ আছে?
ওয়েবস্টারটি

4
যেহেতু স্কোনগুলি অজগর, তাই আপনি আপনার বাইনারি নির্ভরতাগুলি সহজেই পরিচালনা করতে চান যা কোড করতে পারেন। আপনার বাইনারি নির্ভরতার ডিরেক্টরিতে সম্ভবত "স্ক্যানস্ক্রিপ্ট" থাকাও সহায়তা করে। আমি নিশ্চিত এখানে আপনার প্রয়োজনীয়তা কি কি। পেড্রো।
পাইওটর

16
সুতরাং আপনি "আপনার কী প্রয়োজন তা আমি নিশ্চিত নই, তবে আপনি পাইথনে এটি নিজেই প্রোগ্রাম করতে পারেন" এর উপর ভিত্তি করে একটি সরঞ্জাম প্রস্তাব দিচ্ছেন। আপনার তখন স্ক্যানগুলির দরকার কেন?
জলফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.