কেন সর্বদা। / কনফিগার; করা; ইনস্টল করা; 3 পৃথক পদক্ষেপ হিসাবে?


118

যতবার আপনি উত্স থেকে কিছু সংকলন করেন, আপনি একই 3 টি ধাপটি অতিক্রম করেন:

$ ./configure
$ make
$ make install

আমি বুঝতে পেরেছি যে, ইনস্টলিং প্রক্রিয়াটিকে বিভিন্ন ধাপে বিভক্ত করা বোধগম্য, তবে আমি তা পাই না, কেন এই গ্রহের প্রতিটি কোডারকে কেবল একটি একক কাজ করার জন্য একই তিনটি কমান্ড লিখতে হবে। আমার দৃষ্টিকোণ থেকে ./install.shসোর্স কোডের সাথে স্বয়ংক্রিয়ভাবে কোনও স্ক্রিপ্ট বিতরণ করা সম্পূর্ণরূপে বোধগম্য হবে যাতে নিম্নলিখিত পাঠ্য রয়েছে:

#!/bin/sh
./configure
make
make install

কেন লোকেরা পৃথকভাবে 3 টি পদক্ষেপ করবে?


2
যদি বিল্ড সিস্টেমটি সঠিকভাবে লেখা থাকে - এবং এটি সাধারণত হয় - আপনি দ্বিতীয় ধাপটি বাদ দিতে পারেন।
পুনরায় পোস্টার

আপনার প্রশ্নটি বোকা নয়। আপনি লিনাক্স পরিবেশে আপনার প্রোগ্রামটি তৈরি করতে পারেন এবং এর পরে আপনি কিছু ভার্চুয়ালাইজেশন অ্যাপ্লিকেশন ব্যবহার করতে পারেন বা আপনি উইন্ডো এনভায়রনমেন্টে মিংগ ব্যবহার করে সরাসরি তৈরি করতে পারেন।
মিহাই 8

উত্তর:


121

কারণ প্রতিটি পদক্ষেপ বিভিন্ন জিনিস করে

বিল্ডিংয়ের জন্য পরিবেশ প্রস্তুত (সেটআপ) করুন

./configure

এই স্ক্রিপ্টে প্রচুর বিকল্প রয়েছে যা আপনার পরিবর্তন করা উচিত। লাইক --prefixবা --with-dir=/foo। তার মানে প্রতিটি সিস্টেমে আলাদা কনফিগারেশন রয়েছে। এছাড়াও ./configureঅনুপস্থিত লাইব্রেরি ইনস্টল করা উচিত জন্য চেক। এখানে যে কোনও সমস্যা হওয়ায় আপনার অ্যাপ্লিকেশনটি তৈরি না করে । এ কারণেই ডিস্ট্রোদের কাছে প্যাকেজগুলি রয়েছে যা বিভিন্ন জায়গায় ইনস্টল করা আছে, কারণ প্রতিটি ডিস্ট্রো মনে করে নির্দিষ্ট কিছু লাইব্রেরি এবং ফাইলগুলি নির্দিষ্ট ডিরেক্টরিতে ইনস্টল করা ভাল। এটি চালানোর জন্য বলা হয় ./configure, তবে আসলে আপনার এটি সর্বদা পরিবর্তন করা উচিত।

উদাহরণস্বরূপ আর্চ লিনাক্স প্যাকেজ সাইটটি দেখুন । এখানে আপনি দেখতে পাবেন যে কোনও প্যাকেজ একটি আলাদা কনফিগার প্যারামিটার ব্যবহার করে (ধরে নিন যে তারা বিল্ড সিস্টেমের জন্য অটোটুলগুলি ব্যবহার করছে)।

সিস্টেম বিল্ডিং

make

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

সিস্টেমে ইনস্টল করুন

make install

এটি কনফিগার সহ নির্দিষ্ট স্থানে প্যাকেজ ইনস্টল করে। আপনি যদি চান তবে আপনি ./configureআপনার হোম ডিরেক্টরিতে নির্দেশ করতে পারেন । তবে, প্রচুর কনফিগার বিকল্পগুলি ইঙ্গিত করছে /usrবা /usr/local। তার মানে তখন আপনাকে আসলে ব্যবহার করতে হবে sudo make installকারণ কেবল রুটই ফাইলগুলি / usr এবং / usr / local এ অনুলিপি করতে পারে।


এখন আপনি দেখতে পাচ্ছেন যে প্রতিটি পদক্ষেপটি পরবর্তী পদক্ষেপের জন্য পূর্ব-প্রয়োজনীয়তা। প্রতিটি পদক্ষেপটি সমস্যাবিহীন প্রবাহে জিনিসগুলি তৈরি করার প্রস্তুতি। প্যাকেজগুলি তৈরি করতে ডিস্ট্রোজরা এই রূপকটি ব্যবহার করে (যেমন RPM, দেব ইত্যাদি)।

এখানে আপনি দেখতে পাবেন যে প্রতিটি পদক্ষেপ আসলে একটি আলাদা রাষ্ট্র। এজন্য প্যাকেজ পরিচালকদের আলাদা আলাদা মোড়ক রয়েছে। নীচে একটি মোড়কের উদাহরণ দেওয়া হল যা আপনাকে এক ধাপে পুরো প্যাকেজটি তৈরি করতে দেয়। তবে মনে রাখবেন যে প্রতিটি অ্যাপ্লিকেশনটির আলাদা আলাদা মোড়ক রয়েছে (প্রকৃতপক্ষে এই মোড়কের একটি নাম যেমন স্পেক, পিকেজিবিআইএলডি ইত্যাদি রয়েছে):

def setup:
... #use ./configure if autotools is used

def build:
... #use make if autotools is used

def install:
... #use make all if autotools is used

এখানে এক autotools ব্যবহার করতে পারেন, মানে ./configure, makeএবং make install। তবে অন্য একটি স্ক্যানস, পাইথন সম্পর্কিত সেটআপ বা অন্যরকম কিছু ব্যবহার করতে পারে।

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


23
এটি পড়ার পরে, প্রায় এক বছর পরে, আমাকে যুক্ত করতে হবে যে এটি সমস্ত অর্থবোধ করে এবং এখনও একটি একক কমান্ড কল আসতে পারে যা তাদের ডিফল্ট কনফিগারেশন সহ 3 টি পদক্ষেপ করে। তাদের সবার ডিফল্ট কনফিগারেশন রয়েছে অন্যথায় আপনি তর্ক ছাড়াই কেবল তাদের কল করতে পারবেন না।
এরিকবার্ক

কখনও কখনও আমি মেক না করে ইনস্টল করতে পারি। এটার মানে কি? যদি আমি মেকিং এড়িয়ে চলে যাই তবে আমি কি ইনস্টল করতে পারি?
সিএমসিডিগ্রাগনকাই

3
installউপর নির্ভর করে allতাই make installডাকবmake all

চমত্কার উত্তর, তবে আমি বুঝতে পারি না যে কেন কখনও কখনও একটি মেক ইনস্টল প্রয়োজন হয় এবং অন্য সময় না (একক মেক করুন, সমস্ত যাদু করুন)
হ্যানিবাএল 90

make installপ্রাক সংজ্ঞায়িত লোকেশনে কেবলমাত্র বিভিন্ন সংস্থান ইনস্টল করুন। আপনি যদি কেবল এক্সিকিউটেবল ফাইলের বিষয়ে চিন্তা করেন তবে আপনি বিল্ড ডিরেক্টরি থেকে এক্সিকিউটেবল ফাইলটি ব্যবহার করতে পারেন এবং আপনার রাস্তায় বিল্ড ডির যুক্ত করতে পারেন।
jdhao

31

প্রথমত, এটি হওয়া উচিত ./configure && make && make installকারণ প্রতিটি পূর্বের সাফল্যের উপর নির্ভর করে। কারণটির একটি অংশ হ'ল বিবর্তন এবং কারণের একটি অংশ বিকাশ কর্মপ্রবাহের সুবিধার্থে।

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

./configureযান এবং পরিবেশে কী উপলব্ধ তা সনাক্ত করে এবং / অথবা সফ্টওয়্যারটি কীভাবে তৈরি করবেন তা নির্ধারণ করার জন্য ব্যবহারকারী দ্বারা পছন্দসই। এটি এমন কিছু নয় যা খুব ঘন ঘন পরিবর্তনের প্রয়োজন এবং প্রায়শই কিছু সময় নিতে পারে। আবার, আমি যদি বিকাশকারী হয়ে থাকি তবে ক্রমাগত পুনরায় কনফিগার করার সময়টি উপযুক্ত নয়। আরও গুরুত্বপূর্ণ, যেহেতু makeমডিউলগুলি পুনর্নির্মাণের জন্য টাইমস্ট্যাম্পগুলি ব্যবহার করে, যদি আমি আবার চেষ্টা করি তবে configureপতাকাগুলি পরিবর্তিত হওয়ার সম্ভাবনা রয়েছে এবং এখন আমার বিল্ডের কিছু উপাদান পতাকাগুলির একটি সেট এবং অন্যদের পতাকাগুলির একটি পৃথক সংকলন সহ অন্যদের সংকলন করবে যা হতে পারে ভিন্ন, বেমানান আচরণ। যতক্ষণ আমি পুনরায় কাজ না configureকরি, আমি জানি যে আমার সংকলন পরিবেশ আমি যদি আমার উত্স পরিবর্তন করি তবেও একই থাকে। আমি যদি পুনরায় চালনা configureকরি তবে আমার উচিতmake clean প্রথমে জিনিসগুলি অভিন্নভাবে নির্মিত হয়েছে তা নিশ্চিত করতে যে কোনও বিল্ট উত্স সরানো।

কেবলমাত্র তিনটি কমান্ডই যখন একযোগে চালিত হয় যখন ব্যবহারকারীরা প্রোগ্রাম ইনস্টল করেন বা কোনও প্যাকেজ তৈরি করা হয় (যেমন, ডিবিয়ান এর ডেডবিল্ড বা রেডহ্যাটের আরপিএমবাইল্ড)। এবং এটি ধরে নিয়েছে যে প্যাকেজটিকে একটি সমতল দেওয়া যেতে পারে configure, যা সাধারণত প্যাকেজিংয়ের ক্ষেত্রে হয় না, যেখানে কমপক্ষে, --prefix=/usrপছন্দসই হয়। এবং প্যাকাকাররা make installঅংশটি করার সময় নকল-শিকড়গুলি মোকাবেলা করার মতো । যেহেতু প্রচুর ব্যতিক্রম রয়েছে, ./configure && make && make installতাই নিয়মটি তৈরি করা অনেক লোকের পক্ষে অসুবিধে হবে যারা এটি আরও ঘন ঘন ভিত্তিতে করেন!


2
পরামর্শের জন্য ধন্যবাদ &&!
এরিকবার্ক

4

প্রথমত ./ কনফিগার সবসময় তার প্রয়োজন মতো সবকিছু খুঁজে পায় না বা অন্যান্য ক্ষেত্রে এটি তার প্রয়োজনীয় সবগুলি খুঁজে পায় তবে এটি ব্যবহার করতে পারে এমন সব কিছুই খুঁজে পায় না। সেক্ষেত্রে আপনি এটি সম্পর্কে জানতে চাইবেন (এবং আপনার ./install.sh স্ক্রিপ্টটি যাইহোক ব্যর্থ হবে!) আমার দৃষ্টিকোণ থেকে অনিচ্ছাকৃত পরিণতি সহ অ-ব্যর্থতার ক্লাসিক উদাহরণটি ffmpeg বা এমপ্লেয়ারের মতো বৃহত অ্যাপ্লিকেশনগুলি সংকলন করছে। এগুলি লাইব্রেরিগুলি উপলভ্য থাকলে তা ব্যবহার করবে তবে সেগুলি যদি না হয় তবে তা সংকলন করবে, কিছু বিকল্প অক্ষম রেখে। সমস্যাটি হ'ল আপনি পরে আবিষ্কার করেছেন যে এটি কোনও বিন্যাস বা অন্য কোনওর জন্য সমর্থন ছাড়াই সংকলিত হয়েছিল, সুতরাং আপনাকে ফিরে যেতে হবে এবং এটি আবার করতে হবে।

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

নির্দিষ্ট বিতরণগুলি প্রায়শই এমন স্ক্রিপ্ট সরবরাহ করে যা এটি বিতরণ-সংবেদনশীল পদ্ধতিতে ./install.sh কার্যকারিতা সম্পাদন করে - উদাহরণস্বরূপ, উত্স RPMs + spec ফাইল + rpmbuild বা স্ল্যাকবিল্ড

(পাদটীকা: যা বলা হচ্ছে, আমি তাতে সম্মত /। / কনফিগার; মেক; ইনস্টল করুন; অত্যন্ত ক্লান্তিকর হতে পারে))


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

3
সত্য, তবে তবে, কেন একটি ফাইলের প্রয়োজন? কেবলমাত্র একটি উপনাম ব্যবহার করুন (যদিও আপনাকে 'কনমেকইনস' এর চেয়ে আরও ভাল / খাটো নাম ভাবতে হবে, আমি আজ অপ্রতিরোধ্য!)। ওরফে কনমেকইনস = '। / কনফিগার করুন & & Make && sudo make ইনস্টল করুন'; সিডি উত্স ডিরেক্টরি; confmakeins;
সোজ

ভাল লাগছে। আমি নিজে কখনও কোনও উপন্যাস লেখি না, তাই আমি এ নিয়ে ভাবি নি!
এরিকবওয়ার্ক

3

configure এটি যদি নির্ভর করে যে নির্ভরতা অনুপস্থিত রয়েছে তবে ব্যর্থ হতে পারে।

makeএকটি ডিফল্ট লক্ষ্য চালায়, মেকফাইলে তালিকাভুক্ত প্রথমটি। প্রায়শই এই লক্ষ্যটি হয় allতবে সর্বদা হয় না। সুতরাং আপনি কেবল make all installযদি জানতেন যে লক্ষ্য ছিল।

তাই ...

#!/bin/sh

if ./configure $*; then
  if make; then
    make install
  fi
fi

বা:

./configure $* && ./make && ./make install

$*অন্তর্ভুক্ত কারণ এক প্রায়ই করতে অনেক বিকল্প প্রদান রয়েছে configure

তবে কেন লোকেরা নিজেরাই এটি করতে দেয় না? আসলেই কি এতো বড় জয়?


1
এটি মারাত্মক গুরুত্বপূর্ণ নয়, তবে আমরা প্রোগ্রামাররা যা করি তা সম্পর্কে: কম্পিউটারটি আমাদের জন্য পুনরাবৃত্তিমূলক কাজগুলি করার জন্য। রাইট?
এরিকবার্ক

1
আচ্ছা ... configureজিএনইউ অটোমেক টুলকিটের অংশ, যা মেক করার জন্য এক ধরণের। মেক প্রায় বহু বছর ধরে ছিল এবং এটি ভালভাবে কাজ করে does এটি বলেছিল, লোকেরা মেক প্রক্রিয়াটি পরিচালনা করার অন্যান্য উপায় নিয়ে আসে। পিঁপড়া এবং চক্রের তাদের অনুসরণকারী রয়েছে। তবে বিল্ড প্রক্রিয়াটির অংশগুলি (যেমন কনফিগার করা, বিল্ডিং এবং ইনস্টল করা) এখনও সমস্ত পৃথক কমান্ড।
ঘোটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.