Bir makefile'ı diğerinden çağırarak bazı beklenmedik sonuçlar alıyorum. İki makefile var, biri aradı /path/to/project/makefile
, diğeri aradı /path/to/project/gtest-1.4.0/make/Makefile
. Birincisinin ikincisini aramasını sağlamaya çalışıyorum. Proje / makefile / yol / yolunda, var
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
Ve /path/to/project/gtest-1.4.0/make/Makefile
bende var
all: $(TESTS)
clean:
rm -f $(TESTS) gtest.a gtest_main.a *.o
Aşağıdakileri yayınlamak:
cd /path/to/project
make
Çıktılar:
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'
Ancak, şu komutları verdiğimde:
cd /path/to/project
make clean
Anlıyorum:
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'
Anlamıyorum: Her iki durumda da, /path/to/project/makefile
bana geçerli çalışma dizinine girdiğini söylüyor. İlk durumda, yapması gereken bir işi olduğunu düşünmez (yaptığında) ve ikinci durumda, uygun yönergeyi bulabilir (çıktı bana yanlış dizine baktığını söylediğinde) ama dener rm
komutu /path/to/project
yerine çalıştırmak için /path/to/makefile/gtest-1.4.0/make/
.
Birbirinden makefiles çağırmak için temel bir şeyi mi kaçırıyorum? Korkunç bir kavramsal hata mı yaptım veya genel bir tuzağa düştüm mü? Nasıl etkili bir şekilde dizinleri değiştiririm ve ilkinden ikinci bir makefile çağırırım? Anladığım kadarıyla sadece aramanın make -f <name>
yeterli olacağıydı.
Bu bash'ta make / gmake 3.81'dir.
make -f gtest-1.4.0/make/Makefile clean
senin yerine söylesen iyi olur$(MAKE) -C gtest-1.4.0/make clean
. Neden sahte hedefler tanımlamadınız?