অটোমাকে - কীভাবে উত্স গাছটি পরিষ্কার রাখবেন?


10

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


6
কেবলমাত্র গাছের বাইরে একটি বিল্ড করুন: স্ট্যাকওভারফ্লো.com / প্রশ্নগুলি / ১৩১১১২১১/২ এটি দুর্ভাগ্যক্রমে এখনও কিছু অবশিষ্টাংশ ছেড়ে যায়। সিএমকে কিছু দিন চেষ্টা করুন।
পিআই

3
সেই দিনটি এসে গেছে, সেই কুৎসিত অটকোনফ থেকে চটকে উঠতে আমার এক ঘন্টারও কম সময় লেগেছিল যা দেখতে অনেক বেশি ক্লিনার বলে মনে হচ্ছে।
16

1
সিএমকে হ'ল অটোকনফের চেয়ে পরিষ্কার পরিচ্ছন্ন: প্রকৃতপক্ষে, সিএমকে বিল্ড করার সবচেয়ে সাধারণ উপায় হ'ল ট্রি বিল্ড আউট। ভাল পছন্দ :)
ভাইটার পাই

উত্স গাছের উপরে একটি মেকফাইল রাখা কতটা স্বাভাবিক যে চতুর দিয়ে বিল্ড প্রক্রিয়াটি নিয়ন্ত্রণ করে? বলুন করতে চালানো হবে mkdir, -p বিল্ড && সিডি বিল্ড && cmake করতে .. && (হয়তো মত বিভিন্ন লক্ষ্যমাত্রা এবং তাই করতে পরীক্ষা ইত্যাদি)।
ভোরড

বিরল। সিএমকে অন্যভাবে নয়, মেকফাইলগুলি তৈরি করা উচিত! আসল শব্দের উদাহরণগুলির জন্য মাস্টারিং সিএমকে বা ভিটিকে বা কে.ডি.ই বিল্ডিং প্রসেস নামে একটি বই সন্ধান করুন। মেকের শীর্ষে সিএমকের একটি দুর্দান্ত সুবিধা রয়েছে: এটি ভিজ্যুয়াল স্টুডিও vcproj, nmake Makefiles, XCode ইত্যাদির সাহায্যে আপনার সফ্টওয়্যারটি তৈরি করতে পারে KDE এটি দেখুন।
ভিজিটর পাই

উত্তর:


2

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


4
এই হার্ড কোডেড আপেক্ষিক পাথগুলি থাকার অন্য কোনও ভাল কারণ নেই তবে এটি 1970 এর ইউনিক্স প্রোগ্রামিং স্টাইল।
লোথার

2

সমাধান: একটি বাহ্যিক উত্স বিল্ড করা

  • মন্তব্যে প্রস্তাবিত হিসাবে, আপনি একটি বাহ্যিক উত্স বিল্ড করতে পারেন।
  • নীতিটি হ'ল: অন্য ডিরেক্টরি তৈরি করুন, "বিল্ড ট্রি", সেই ডিরেক্টরি থেকে কনফিগার স্ক্রিপ্টটি চালান (আপেক্ষিক বা পরম পাথ সহ)।

স্বয়ংক্রিয় চেক সহ উদাহরণ

উদাহরণস্বরূপ, এটি GNU হ্যালো আনবে এবং তৈরি করবে এবং উত্স গাছটি একটি সামান্য বিট পরিবর্তিত হয়নি তা পরীক্ষা করে দেখুন।

উত্স গাছ প্রস্তুতি

এই অংশটি ডিরেক্টরিগুলি আনে এবং প্রস্তুত করে।

{
wget -S http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
tar zxvf hello-2.10.tar.gz
mv hello-2.10 hello-2.10-pristine
tar zxvf hello-2.10.tar.gz
diff -urq hello-2.10 hello-2.10-pristine && echo "Before build, directories are identical."
cd hello-2.10
}

জেনেরিক অংশ: আপনার প্রকল্পে এটি পুনরায় ব্যবহার করুন

এই অংশটি অন্যান্য স্বায়ত্তশাসিত-ভিত্তিক প্রকল্পগুলির সাথে ব্যবহার করা যেতে পারে। দৌড়ানোর আগে আপনার প্রকল্পে কেবল সিডি করুন। rmসাবধানতা : এই রানগুলি, ভেরিয়েন্টগুলির সাথে খেললে সতর্কতা অবলম্বন করুন, আপনি যে কোনও ক্ষেত্রেই প্রতিক্রিয়াশীল।

export MYPREFIX="${PWD}.installtree"
(
set -eu # abort on error
ls configure # make sure it aborts if not in correct directory
export SRCTREE="${PWD}"
export BUILDTREE="${PWD}.buildtree"
rm -rf "$BUILDTREE" "$MYPREFIX"
mkdir "$BUILDTREE" "$MYPREFIX"
cd "$BUILDTREE"
"${SRCTREE}"/configure --prefix="${MYPREFIX?}"
time make -k || time make
time make install
)

অংশ পরীক্ষা করুন

এই বিল্ডটি নিখুঁতভাবে উত্সের বাইরে রয়েছে কিনা তা পরীক্ষা করে।

{
ls "$MYPREFIX"/bin/hello && echo "Okay, build generated the target."
cd "$MYPREFIX"/..
diff -urq hello-2.10 hello-2.10-pristine && echo "No change at all. Perfect out-of-source build success."
}

এখানে এটি ফলাফল:

/tmp/hello-2.10.installtree/bin/hello
Okay, build generated the target.
No change at all. Perfect out-of-source build success.

বোনাস: নন-রুট ইনস্টল

--prefix="${MYPREFIX?}"অংশ উপরে ঐচ্ছিক। এটি আপনার অ্যাকাউন্টে স্থানীয় যে "মেক ইনস্টল" করতে দেয়। আপনি যদি সিস্টেম-ব্যাপী লোকেশনে traditionalতিহ্যবাহী "সুডো মেক ইনস্টল" চান, আপনি মুছে ফেলতে পারেন --prefix="${MYPREFIX?}"

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.