Как назвать Make-файл от другого Make-файла?

Я получаю некоторые неожиданные результаты, называя один make-файл от другого. У меня есть два make-файла, один названный /path/to/project/makefile и один названный /path/to/project/gtest-1.4.0/make/Makefile. Я пытаюсь иметь бывший вызов последний. В/path/to/project/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-файлов друг от друга? Я сделал вопиющую концептуальную ошибку или поразил распространенную ошибку? Как я эффективно изменяю каталоги и называю второй make-файл из первого? Мое понимание было этим просто вызов make -f <name> был бы достаточно.

Это - make/gmake 3.81 в ударе.

111
задан kenorb 10 November 2014 в 19:38
поделиться

2 ответа

Я не совсем понимаю, о чем вы спрашиваете, но с помощью параметра командной строки -f просто указывается файл - он не сообщает программе make изменить каталоги. Если вы хотите выполнить работу в другом каталоге, вам необходимо cd в каталог:

clean:
    cd gtest-1.4.0 && $(MAKE) clean

Обратите внимание, что каждая строка в Makefile выполняется в отдельной оболочке, поэтому нет нужно сменить каталог обратно.

97
ответ дан 24 November 2019 в 03:00
поделиться

Кажется очевидным, что $(TESTS) пуст, так что ваш 1.4.0 makefile фактически

all: 

clean:
  rm -f  gtest.a gtest_main.a *.o

Действительно, все не имеет ничего общего. и чистый делает в точности то, что он говорит rm -f gtest.a ...

1
ответ дан 24 November 2019 в 03:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: