मुझे कुछ अप्रत्याशित परिणाम मिल रहे हैं जो एक से दूसरे मेकफाइल कह रहे हैं। मेरे पास दो मेकफाइल्स हैं, एक कॉल /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>
पर्याप्त होगी।
यह बैश में 3.81 gmake है।
make -f gtest-1.4.0/make/Makefile clean
आप बेहतर कहते हैं$(MAKE) -C gtest-1.4.0/make clean
। आपने फ़ॉनी लक्ष्यों को परिभाषित क्यों नहीं किया है?