Я строю Syslinux, и есть один конкретный каталог, для которого мне нужен другой CC. Вместо того, чтобы исправлять Makefile, я не могу просто вызвать make
со специальными аргументами для этого файла? Я не понял, как это сделать.Сделать одну конкретную цель в дереве Makefile
Когда я просто запустить make
нормально, это последние строки являются:
make -r -C lzo SRC="/syslinux-6.03/lzo" OBJ="/syslinux-6.03/bios/lzo" \
-f /syslinux-6.03/lzo/Makefile all
make[3]: Entering directory '/syslinux-6.03/bios/lzo'
gcc -o prepcore prepcore.o lzo.a
Но если я компакт-диска в bios/lzo
и запустить make prepcore
, он не работает, вероятно, потому, что она нуждается в некоторых средах от родительского каталога Makefiles , Сообщение об ошибке:
make: Entering directory '/syslinux-6.03/lzo'
/syslinux-6.03/lzo/Makefile:14: /build.mk: No such file or directory
make: *** No rule to make target '/build.mk'. Stop.
make: Leaving directory '/syslinux-6.03/lzo'
Так что мой вопрос, что такое правильный способ сказать сделать «для текущего дерева каталогов, найти цель для <file>
и сделать это»?
Ответ на ваш вопрос, вы должны найти имя цели и передать его делать. Тогда make построит эту цель. Но вы уже знаете, что, поскольку вы описываете запуск 'make prepcore'; здесь 'prepcore' - это имя цели, которую вы попросили, чтобы сделать сборку. Поэтому я не понимаю ваш вопрос. – MadScientist
@MadScientist, как я уже сказал, он не работает. Он пытается связать без 'lzo.a', что приводит к неразрешенным символам. –
Что вы спросили, как построить конкретную цель из командной строки. Я рассказал вам, как вы это делаете. То, что вы действительно хотите знать, - это «какая цель в моей среде makefile я должен вызвать для правильной работы ссылки», что, конечно, мы не можем сказать вам, потому что у нас нет ваших файлов make-файлов, поэтому мы не знаем какие цели существуют или что они делают. Вам нужно будет посмотреть на свои файлы make-файлов и найти нужную цель, а затем запустить 'make', указав это целевое имя. – MadScientist