Gnuwin32, Makefile, mkdir -p?


0

আমি gnuwin32 মূল ব্যবহারগুলি ইনস্টল করেছি, তৈরি এবং গেটেক্সট:

http://gnuwin32.sourceforge.net/packages/coreutils.htm
http://gnuwin32.sourceforge.net/packages/make.htm
http://gnuwin32.sourceforge.net/packages/gettext.htm

আমার কাছে এমন একটি মেকফাইল রয়েছে যা দেখতে দেখতে:

.PHONY: po mo

po:
    xgettext -Lpython --output=po/messages.pot vocelab/app.py vocelab/app.kv
    msgmerge --update --no-fuzzy-matching --backup=off po/en.po po/messages.pot
    msgmerge --update --no-fuzzy-matching --backup=off po/hu.po po/messages.pot

mo:
    mkdir -p "data/locales/en/LC_MESSAGES"
    mkdir -p "data/locales/hu/LC_MESSAGES"
    msgfmt -c -o data/locales/en/LC_MESSAGES/langapp.mo po/en.po
    msgfmt -c -o data/locales/hu/LC_MESSAGES/langapp.mo po/hu.po

সমস্যাটি হ'ল mkdir কমান্ডটি হ'ল বিল্ট-ইন cmd.exe। যদিও আমার পথে "সি: \ প্রোগ্রাম ফাইল (x86) \ GnuWin32 \ বিন" রয়েছে তবে বিল্ট-ইন কমান্ডটি প্রাধান্য পাবে। সুতরাং যখন আমি "মেক মো" টাইপ করি তখন আমি এই ত্রুটিটি পাই:

A subdirectory or file data/locales/en/LC_MESSAGES already exists.

আমি মেকডিলে "c: ir প্রোগ্রাম ফাইল (x86) \ GnuWin32 \ bin \ mkdir.exe" দিয়ে mkdir প্রতিস্থাপন করতে পারি, তবে এটি সঠিক বলে মনে হচ্ছে না। একটি ভিন্ন সিস্টেমে কারওর কাছে gnuwin32 এর জন্য আলাদা অবস্থান থাকতে পারে।

অন্য কথায়: mkdir.exe আছে, তবে এটি cmd.exe এর বিল্ট-অন কমান্ডের সাথে সাংঘর্ষিক। অন্য বিকল্পটি উইন্ডোজে একটি আলাদা শেল ব্যবহার করা হবে। তবে উইন্ডোজের জন্য লিনাক্স সাবসিস্টেম ইনস্টল করার জন্য, বা সাইগউইন ইনস্টল করার জন্য গিগা বাইট ডিস্কের প্রয়োজন হবে। বিপরীতে, এই প্রকল্পের জন্য প্রয়োজনীয় gnu win32 ডিরেক্টরিটি কেবলমাত্র 40MB।

আমি একটি সমাধান পেয়েছি যা আসলে কাজ করে তবে এটি কুৎসিত এবং বহনযোগ্য নয়:

GNUWIN32=c:/Program Files (x86)/GnuWin32\bin

.PHONY: po mo

po:
    "$(GNUWIN32)/xgettext" -Lpython --output=po/messages.pot vocelab/app.py vocelab/app.kv
    "$(GNUWIN32)/msgmerge" --update --no-fuzzy-matching --backup=off po/en.po po/messages.pot
    "$(GNUWIN32)/msgmerge" --update --no-fuzzy-matching --backup=off po/hu.po po/messages.pot

mo:
    "$(GNUWIN32)/mkdir" -p "data/locales/en/LC_MESSAGES"
    "$(GNUWIN32)/mkdir" -p "data/locales/hu/LC_MESSAGES"
    "$(GNUWIN32)/msgfmt" -c -o data/locales/en/LC_MESSAGES/langapp.mo po/en.po
    "$(GNUWIN32)/msgfmt" -c -o data/locales/hu/LC_MESSAGES/langapp.mo po/hu.po

উত্তর:


2

সিএমডি উইন্ডোজ 8+ সিস্টেমে আর স্যুইচ mkdirসমর্থন করে না -p। এজন্য আপনি এই ত্রুটি পান।

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

সিএমডি দিয়ে ত্রুটি কাটিয়ে উঠতে mkdir(কেবল উইন্ডোজের জন্য) :

if not exist "data/locales/en/LC_MESSAGES" mkdir "data/locales/en/LC_MESSAGES"

বা একটি সংক্ষিপ্ত কমান্ড জন্য

en = "data/locales/en/LC_MESSAGES"
hu = "data/locales/hu/LC_MESSAGES"

if not exist $en mkdir $en
if not exist $hu mkdir $hu

জ্ঞানউইন ব্যবহার করতে mkdir

উপর ডাবল উদ্ধৃতি ব্যবহার করুন mkdir। এটি mkdirসিএমডি কমান্ডের পরিবর্তে উইন্ডোজগুলিকে এক্সিকিউটেবল অনুসন্ধান করতে বাধ্য করবে ।

"mkdir" -p "data/locales/en/LC_MESSAGES"

আপডেট: কালি লিনাক্স, লিনাক্স মিন্ট, উইন্ডোজ in এ ডাবল উদ্ধৃতি পরীক্ষা করে এবং সেগুলির উপরে কাজ করে। কেবল gnuwin\binআপনার সিস্টেমের পথেই রয়েছে তা নিশ্চিত করুন


আমি gnuwin32 এর mkdir ব্যবহার করতে চাই। আমি মনে করি যে প্রশ্নে স্পষ্ট ছিল। যে mkdir.exe -p সুইচ সমর্থন করে। আপনার প্রস্তাবিত ইফ কনস্ট্রাক্টটি পোর্টেবল নয়, লিনাক্সে কাজ করে না।
নাগাইলিজ

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

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