আমি অন্য থেকে এক মেকফিলকে কল করে কিছু অপ্রত্যাশিত ফলাফল পাচ্ছি। আমার দুটি মেকফাইল রয়েছে, একটি কল /path/to/project/makefile
এবং একটি কল /path/to/project/gtest-1.4.0/make/Makefile
। আমি প্রাক্তন কলটি পরে থাকার চেষ্টা করছি। ইন / পাথ / টু / প্রজেক্ট / মেকফিল, আমার আছে
dev: $(OBJ_FILES)
$(CPPC) $(LIBS) $(FLAGS_DEV) $(OBJ_FILES) -o $(BIN_DIR)/$(PROJECT)
$(MAKE) -f ./gtest-1.4.0/make/Makefile
clean:
rm -f ./*~ ./gmon.out ./core $(SRC_DIR)/*~ $(OBJ_DIR)/*.o
rm -f ../svn-commit.tmp~
rm -f $(BIN_DIR)/$(PROJECT)
make -f gtest-1.4.0/make/Makefile clean
এবং /path/to/project/gtest-1.4.0/make/Makefile
আমি আছে
all: $(TESTS)
clean:
rm -f $(TESTS) gtest.a gtest_main.a *.o
নিম্নলিখিত জারি:
cd /path/to/project
make
আউটপুট:
make -f ./gtest-1.4.0/make/Makefile
make[1]: Entering directory `/path/to/project'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/path/to/project'
যাইহোক, আমি যখন এই আদেশগুলি জারি করি:
cd /path/to/project
make clean
আমি দেখি:
make -f gtest-1.4.0/make/Makefile clean
make[1]: Entering directory `/path/to/project'
rm -f gtest.a gtest_main.a *.o
make[1]: Leaving directory `/path/to/project'
আমি বুঝতে পারি না: উভয় ক্ষেত্রেই, /path/to/project/makefile
এটি আমাকে বলছে এটি বর্তমান ওয়ার্কিং ডিরেক্টরিতে প্রবেশ করছে। প্রথম ক্ষেত্রে, এটি এটি করার কাজ করে বলে মনে করে না (যখন এটি করে) এবং দ্বিতীয় ক্ষেত্রে এটি উপযুক্ত নির্দেশ খুঁজে পেতে সক্ষম হয় (যখন আউটপুট আমাকে বলছে যে এটি ভুল ডিরেক্টরিতে দেখছে) তবুও এটি চেষ্টা করে rm
কমান্ড চালাতে /path/to/project
, পরিবর্তে /path/to/makefile/gtest-1.4.0/make/
।
আমি কি একে অপরের কাছ থেকে মেকফিলগুলি কল করার জন্য মৌলিক কিছু অনুভব করছি? আমি কি একটি প্রচলিত ধারণাগত ভুল করেছি, বা একটি সাধারণ ক্ষতি করেছি? আমি কীভাবে কার্যকরভাবে ডিরেক্টরিগুলি পরিবর্তন করব এবং প্রথম থেকে দ্বিতীয় মেকফিল কল করব? আমার বোঝা ছিল যে কেবল কল make -f <name>
করা যথেষ্ট হবে be
এটি বেশে 3.81 মেক / গেমেক।
make -f gtest-1.4.0/make/Makefile clean
আরও ভাল বলুন$(MAKE) -C gtest-1.4.0/make clean
। কেন আপনি নকল লক্ষ্য নির্ধারণ করেন নি?