Доступ к родительским целям Makefile из подкаталога - PullRequest
0 голосов
/ 05 августа 2020

Допустим, у меня такая структура каталогов:

foo
foo/Makefile
foo/bar

Теперь предположим, что foo/Makefile имеет цель make baz.

Я хочу позвонить make baz из foo/bar без создание еще одного Makefile в подкаталоге bar. Возможно ли это?

1 Ответ

0 голосов
/ 05 августа 2020

GNU make имеет два важных варианта для вашей ситуации: -f FILE используется, чтобы указать make, какие make-файлы использовать вместо значений по умолчанию, а -C DIR сообщает make перейти в каталог DIR перед чтением make-файлов. Как использовать один или другой или оба, зависит от вашего конкретного случая c. Обратите внимание, что -f соответствует стандарту POSIX, а -C - это расширение, поддерживаемое GNU make. Если -C не поддерживается вашей собственной версией make и не имеет эквивалента, вам придется самостоятельно изменить текущий каталог перед вызовом make, например, ( cd some/where; make...; ).

  1. Если вы можете собрать baz из foo/bar/, как предлагает Oo.oO , вы можете просто

     make -f ../Makefile baz
    

    make запустится из foo/bar/ и построит baz, как указано в ../Makefile.

  2. Если вы должны быть в foo/, чтобы построить baz, вы должны использовать:

     make -C .. baz
    

    make изменится на .., то есть foo перед чтением make-файлов, и, поскольку он найдет здесь одно из значений по умолчанию (Makefile), он будет использовать его, чтобы узнать, как построить baz.

  3. Если вы должны находиться в другом каталоге, например, в родительском каталоге foo/, вам нужны оба параметра и введите:

     make -C ../.. -f foo/Makefile baz
    

    make сначала изменится на ../.. ( родительский каталог foo/), и отсюда он будет использовать foo/Makefile, чтобы узнать, как построить baz.

...