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