2015-03-14 2 views
1

Я строю 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> и сделать это»?

+0

Ответ на ваш вопрос, вы должны найти имя цели и передать его делать. Тогда make построит эту цель. Но вы уже знаете, что, поскольку вы описываете запуск 'make prepcore'; здесь 'prepcore' - это имя цели, которую вы попросили, чтобы сделать сборку. Поэтому я не понимаю ваш вопрос. – MadScientist

+0

@MadScientist, как я уже сказал, он не работает. Он пытается связать без 'lzo.a', что приводит к неразрешенным символам. –

+0

Что вы спросили, как построить конкретную цель из командной строки. Я рассказал вам, как вы это делаете. То, что вы действительно хотите знать, - это «какая цель в моей среде makefile я должен вызвать для правильной работы ссылки», что, конечно, мы не можем сказать вам, потому что у нас нет ваших файлов make-файлов, поэтому мы не знаем какие цели существуют или что они делают. Вам нужно будет посмотреть на свои файлы make-файлов и найти нужную цель, а затем запустить 'make', указав это целевое имя. – MadScientist

ответ

1

Вот как это сделать: remake. Вы запускаете «римейк» и устанавливаете точку останова на цель, которую хотите изменить. Затем используйте команду «написать», чтобы написать команды, которые она выполнила бы в сценарий оболочки. Затем вы можете отредактировать этот сценарий оболочки, чтобы настроить команды, которые он запускает, для необходимых изменений. Сценарий оболочки будет содержать команду каталога изменений, которую вы, вероятно, захотите прокомментировать.

Вот пример:

$ rm job.o 
$ remake -X job.o 
GNU Make 4.1+dbg0.91 
Built for x86_64-unknown-linux-gnu 
... 
-> (/src/external-vcs/github/remake/Makefile:621) 
Makefile: Makefile.in config.status 
remake<0> s 
... # Step until job.o 
remake<9> s 
Must remake target 'job.o'. 
Makefile:781: update target 'job.o' due to: job.c /usr/include/stdc-predef.h ... 
##>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
depbase=`echo job.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\ 
gcc -DLOCALEDIR=\"/usr/local/share/locale\" -DLIBDIR=\"/usr/local/lib\" -DINCLUDEDIR=\"/usr/local/include\" -DHAVE_CONFIG_H -I. -DMAKE_MAINTAINER_MODE -pthread -I/usr/include/guile/2.0 -Wall -Wextra -Wdeclaration-after-statement -Wshadow -Wpointer-arith -Wbad-function-cast -g -O2 -MT job.o -MD -MP -MF $depbase.Tpo -c -o job.o job.c &&\ 
mv -f $depbase.Tpo $depbase.Po 
##<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
++ (/src/external-vcs/github/remake/.deps/job.Po:1) 
job.o 
remake<10> w 
File "/tmp/job.o.sh" written. 
remake<11> 

Теперь посмотрим на файл он писал:

#!/bin/bash 
#/tmp/github/remake/.deps/job.Po:1 
#cd /tmp/remake 
depbase=`echo job.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\ 
    gcc -DLOCALEDIR=\"/usr/local/share/locale\" -DLIBDIR=\"/usr/local/lib\" -DINCLUDEDIR=\"/usr/local/include\" -DHAVE_CONFIG_H -I. -DMAKE_MAINTAINER_MODE -pthread -I/usr/include/guile/2.0 -Wall -Wextra -Wdeclaration-after-statement -Wshadow -Wpointer-arith -Wbad-function-cast -g -O2 -MT job.o -MD -MP -MF $depbase.Tpo -c -o job.o job.c &&\ 
mv -f $depbase.Tpo $depbase.Po 
Смежные вопросы