我正在构建Syslinux,并且有一个特定的目录,我想要一个不同的CC。而不是修补Makefile,我不能只用这个文件的特殊参数调用make
?我还没弄明白怎么做。
当我正常运行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
,它就不起作用,可能是因为它需要来自父目录Makefile的一些环境。错误消息是:
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 :(得分:1)
以下是使用remake执行此操作的方法。您运行“重制”并在要更改的目标上设置断点。然后使用重制的“write”命令将它运行的命令写入shell脚本。然后,您可以编辑该shell脚本以调整它运行的命令以进行所需的更改。 shell脚本中会有一个更改目录命令,您可能想要注释掉它。
以下是一个例子:
$ 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