লক্ষ্যটি আপ টু ডেট আছে কেন?


223

এটি আমার মেকফাইল:

REBAR=./rebar
REBAR_COMPILE=$(REBAR) get-deps compile

all: compile

compile:
    $(REBAR_COMPILE)

test:
    $(REBAR_COMPILE) skip_deps=true eunit

clean:
    -rm -rf deps ebin priv doc/*

docs:
    $(REBAR_COMPILE) doc

ifeq ($(wildcard dialyzer/sqlite3.plt),)
static:
    $(REBAR_COMPILE) build_plt analyze
else
static:
    $(REBAR_COMPILE) analyze
endif

আমি make compileএকাধিকবার চালাতে পারি এবং পেতে পারি

aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ make compile
./rebar get-deps compile
==> erlang-sqlite (get-deps)
==> erlang-sqlite (compile)

যাইহোক, কিছু কারণে চলমান make testসবসময় দেয়

aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ make test
make: `test' is up to date.

ফাইলগুলি সংকলিত না হলেও। প্রশ্ন হচ্ছে, কেন?

একই কমান্ড চালানো সরাসরি কাজ করে:

aromanov@alexey-desktop:~/workspace/gm-controller/lib/erlang-sqlite$ ./rebar get-deps compile skip_deps=true eunit
==> erlang-sqlite (get-deps)
==> erlang-sqlite (compile)
Compiled src/sqlite3_lib.erl
Compiled src/sqlite3.erl
==> erlang-sqlite (eunit)
...

উত্তর:


459

হয়ত আপনার কাছে ডিরেক্টরিতে একটি ফাইল / testডিরেক্টরি রয়েছে। যদি এই ডিরেক্টরিটি বিদ্যমান থাকে এবং এর কোনও নির্ভরতা নেই যা সাম্প্রতিকতম হয় তবে এই লক্ষ্যটি পুনর্নির্মাণ করা হয় না।

ফাইল-সম্পর্কিত নয় এমন লক্ষ্যগুলিতে পুনর্নির্মাণের জন্য জোর করার জন্য, আপনাকে নীচের মত এগুলি অবুঝ করা উচিত:

.PHONY: all test clean

মনে রাখবেন যে আপনি সেখানে আপনার সমস্ত কলঙ্ক লক্ষ্যগুলি ঘোষণা করতে পারেন।


2
আমার বিল্ড নামে একটি ডিরেক্টরি ছিল এবং অন্যটি লাইব নামে পরিচিত। অনিশ্চিতিতে, এগুলি নিখুঁত টার্গেটের নাম নয়। বিতৃষ্ণা ..... ভুলবেন না।
ম্যাটডি

9
* কোথায় all, testএবং clearআপনার
মেকফিল

আরেকটি সমাধান হ'ল লেবেল পরিবর্তন করা। আপনার ক্ষেত্রে, অন্যর testজন্য test_ruleবা অন্যরকম পরিবর্তন করুন ।
আওরহাম

@ ম্যাটডি তাই আমি কি এটি তৈরির জন্য সমস্যা?
gromit190

@ বার্গার যদি আপনার লক্ষ্যগুলি থাকে যে আপনি "মেক বিল্ড" এবং "মেক লাইব" এর মতো অনুরোধ করতে চান এবং আপনার সেই ডিরেক্টরিগুলি উপস্থিত রয়েছে, তবে আপনাকে এই কৌশল বা এর মতো একটি ব্যবহার করতে হবে।
ম্যাটডি

34

সম্পাদনা: এটি কেবলমাত্র কয়েকটি সংস্করণে প্রযোজ্য make- আপনার ম্যান পৃষ্ঠাটি পরীক্ষা করা উচিত।

আপনি -Bপতাকাটিও পাস করতে পারেন make। ম্যান পৃষ্ঠা অনুসারে, এটি করে:

-B, --always-make নিঃশর্তভাবে সমস্ত লক্ষ্যবস্তু তৈরি করুন।

সুতরাং make -B testআপনার সমস্যা সমাধানের আপনি একটি পরিস্থিতিতে থাকতাম যেখানে আপনি সম্পাদন করা না চাইবেন Makefileঅথবা আপনার পরীক্ষা ফোল্ডার নাম পরিবর্তন করুন।


-Bআমার জন্য পশ্চাদপটে সামঞ্জস্যপূর্ণ মোড ... (ফ্রিবিএসডি, ওএস / জিএনইউ টুলকিট কোনও প্রশ্নের মধ্যে সুনির্দিষ্ট বলে মনে হচ্ছে না)
গার্ট ভ্যান ডান বার্গ

ওহ আকর্ষণীয় ... আপনার --always-makeজন্য কাজ করে?
জামেস্ক

নাঃ। .PHONYলক্ষ্য পোর্টেবল যদিও ধরনের বলে মনে হয় ... (অন্তত FreeBSD 'র ক্ষেত্রে, নিশ্চিত করুন না সোলারিস ভালো জিনিস সম্বন্ধে)
গার্টি ভ্যান ডেন বার্গ

1
এটি তৈরির উদ্দেশ্যটিকে অস্বীকার করে - কোনও প্রোগ্রামের কোন অংশটি পরিবর্তনের পরে পুনরায় তৈরি করা দরকার তা স্বয়ংক্রিয়ভাবে নির্ধারণ করে। আপনার মেকফিলের যদি --always-makeকাজ করার বিকল্পের প্রয়োজন হয় তবে আপনার মেকফিলটি নষ্ট হয়ে গেছে।
osvein

1
@ জার্মটভেনডেনবার্গ .PHONY পসিএক্স স্ট্যান্ডার্ড অস্টিংগ্রুপব্যাগনেস
ভিউ.এফপি?

9

মেকফিল যে ডিরেক্টরিটিতে উপস্থিত রয়েছে সেখানে মেকফিল লক্ষ্য নামের মতো একই নামযুক্ত একটি ফাইল রাখলে এটি ঘটে।

এখানে চিত্র বর্ণনা লিখুন


এটা আমার সমস্যা ছিল। ধন্যবাদ!
আইদন রসউড

1

আমার ভুলটি কেবল "ফাইলের নাম:" এর পরিবর্তে টার্গেটের নাম "ফাইলের নাম। সি:" তৈরি করছিল

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