মেকফিল এবং সংকলনের জন্য পুনরাবৃত্তভাবে উপরে যান


9

সমস্যাটি M-x compileহ'ল এটি যদি Makefileবর্তমান ডিরেক্টরিতে না থাকে তবে এটি ব্যর্থ হয়।

আমি একটি ফাংশন চাই যা পুনরাবৃত্তভাবে এই ডিরেক্টরিটি থেকে একটি অনুসন্ধান করতে Makefileএবং চালাতে makeযায়।

আমি এই প্রশ্নটি দেখেছি , তবে এটি পথ-নির্দিষ্ট, এবং এটি আমার দৌড়ের বিষয়ে ভাবতে হবে।


আপনি যদি ব্যবহার করে থাকেন projectileতবে এগুলি থেকে সংকলনের উপায় রয়েছে projectile-project-root। উদাহরণস্বরূপ, github.com/abo-abo/helm-make
abo-abo

@ আবো-আবো আমি প্রক্ষিপ্ত চেষ্টা করিনি! মনে projectile-compile-projectহচ্ছে যা আমি চাই তাই করে তবে আমি যদি সম্ভব হয় তবে এই নির্ভরতা ছাড়া কিছু পেতে চাই।
ফ্লোরিয়ান মার্জাইন

ধন্যবাদ, প্রক্ষেপণ-সংকলন-প্রকল্পটি আমার জন্য কাজ করে
নেটওয়াটার

উত্তর:


15

আপনি ফাংশনটি সন্ধান করছেন locate-dominating-file। এই ফাংশনটির জন্য এখানে ইমাস ডকুমেন্টেশন রয়েছে:

(locate-dominating-file FILE NAME)

FILEধারণকারী ডিরেক্টরি জন্য ডিরেক্টরি শ্রেণিবিন্যাস সন্ধান করুন NAME। ফাইল সহ প্রথম প্যারেন্ট ডিরেক্টরিতে থামুন এবং ডিরেক্টরিটি NAMEফিরিয়ে দিন। nilযদি না পাওয়া যায় তবে ফিরে আসুন । স্ট্রিংয়ের পরিবর্তে, একটি NAMEআর্গুমেন্ট (ডিরেক্টরি) গ্রহণ করা এবং কোনও ডিরেক্টরি যদি আমরা সেই ডিরেক্টরিটিকেই খুঁজছি তবে এটি একটি নন-শূন্য মান প্রদান করা একটি প্রিকিকেটও হতে পারে।

এটি ব্যবহার করে, আবো-আবোর উত্তরটি সংক্ষিপ্ত করা যেতে পারে

(defun desperately-compile ()
  "Traveling up the path, find a Makefile and `compile'."
  (interactive)
  (when (locate-dominating-file default-directory "Makefile")
  (with-temp-buffer
    (cd (locate-dominating-file default-directory "Makefile"))
    (compile "make -k"))))

নিস! এই ফাংশনটি আমার লুপের সাথে একই রকম কাজ করে তবে একটি ভাল-ডকুমেন্টেড এবং এজ-কেস পরিচালনা করার পথে। আমি এটি আমার রেসিপি তালিকায় যুক্ত করার বিষয়টি নিশ্চিত করব, ধন্যবাদ।
আবো-আবো 17'15

নিস! ভিমের একটি অনুরূপ ফাংশন রয়েছে যার নাম findfileআমি পেয়েছি, আমি অবাক হয়েছি ইমাসের এটি ছিল না।
ফ্লোরিয়ান মার্জাইন

লিস্পের মতো কিছু নেই let? আপনি locate-dominating-fileদু'বার দৌড়াচ্ছেন ।
ফ্লোরিয়ান মার্জাইন 21

@ ফ্লোরিয়ানমারগাইন হ্যাঁ, আপনি লেট ব্যবহার করতে পারেন। আমি সরাসরি পরীক্ষা না করেই উত্তরটি টাইপ করছিলাম এবং অনুধাবন করা হয়েছিল যে এটি বন্ধুত্বের ভুল জায়গায় ফোটার সম্ভাবনা কম ছিল :)
প্রধান

আমি আশা করি আমি এই উত্তরটি আরও ভোট দিতে পারতাম। ধন্যবাদ.
এরিক

6

পুনরাবৃত্তির সংকলন, কোনও নির্ভরতা সংযুক্ত নেই:

(defun desperately-compile ()
  "Traveling up the path, find a Makefile and `compile'."
  (interactive)
  (with-temp-buffer
    (while (and (not (file-exists-p "Makefile"))
                (not (equal "/" default-directory)))
      (cd ".."))
    (when (file-exists-p "Makefile")
      (compile "make -k"))))

অসাধারণ! আমি ঠিক তাই চেয়েছিলাম
ফ্লোরিয়ান মার্জাইন

ঠিক আছে, লুপের শেষ শর্তটি সম্পর্কে সতর্ক থাকুন। আপনি যদি উইন্ডোতে থাকেন তবে আপনি একটি অন্তহীন লুপ পেতে পারেন।
আব্বো-আবো

পার্শ্ব প্রশ্ন: আপনি কেন ব্যবহার করছেন with-temp-buffer?
ফ্লোরিয়ান মার্জাইন

হ্যাঁ আমি উইন্ডোজ সম্পর্কে চিন্তা করি না, তবে এটি উল্লেখ করার জন্য ধন্যবাদ।
ফ্লোরিয়ান মার্জাইন

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