我有一个Makefile,它可以从一个新的shell中完美地调用,即:
make -C /dir/
Run Code Online (Sandbox Code Playgroud)
但是,如果我从另一个 Makefile 调用此Makefile ,则由于某些复杂的依赖性问题而失败.清楚地了解嵌套调用,通过打印make[1]:等显而易见,我怀疑make是以某种方式与其子进程共享变量.
无论如何在Makefile中调用一个干净的 make?如果我的构建工作是从一个干净的shell,它应该可以从另一个Makefile调用它而不解决脚本内部的恐怖!:)
谢谢!
我有一个设置,其中make通过一堆子目录并在这些目录中进行.我希望它立即停止构建失败.下面的代码片段说明了这一点.有人能指出我应该如何设置makefile的正确方向,或者有关从顶层到子目录构建的文档?
SUBDIRS = \
test1 \
test2
all clean check :
@for dir in $(SUBDIRS); do \
if [ -d $$dir ]; then (cd $$dir; $(MAKE) $@) fi \
done
Run Code Online (Sandbox Code Playgroud) 这是我的目录的样子:
/project
makefile
/ceda_lib
makefile
files....
/general
makefile
files....
/CLI
makefile
files....
/objects
files.o
Run Code Online (Sandbox Code Playgroud)
Makefile文件(主):
1 #start other makefiles
2
3
4 o= ./objects
5 DEPS= Affine.hpp CEDA.hpp generalParameters.hpp generalFunctions.hpp
6 OBJ= $o/main.o $o/Affine.o $o/generalFunctions.o
7 CC=g++
8 CFLAGS= -Wall -g -I.
9 export CC
10 export CFLAGS
11 export DEPS
12
13 all:
14 ?---+$(MAKE) -C general
15 ?---+$(MAKE) -C ceda_lib
16 ?---+$(MAKE) -C CLI
17
18 run: $(OBJ) $(DEPS)
19 ?---$(CC) -o $@ $^
Run Code Online (Sandbox Code Playgroud)
其他makefile看起来像这样:(update2)
1 include ../makefile.variables …Run Code Online (Sandbox Code Playgroud) 我想在Ubuntu上信任安装WordNet-3.0.
当我运行configure脚本时,我得到了:
checking for Tcl configuration... configure: WARNING: Can't find Tcl
configuration definitions
Run Code Online (Sandbox Code Playgroud)
这是一个警告,但仍然在没有创建makefile的情况下停止配置.
所以我下载并安装了tcl8.6.1,然后再次运行configure脚本,但我得到了:
checking for Tcl configuration... found /usr/local/lib/tclConfig.sh
checking for Tk configuration... configure: WARNING: Can't find Tk
configuration definitions
Run Code Online (Sandbox Code Playgroud)
所以我下载并安装了tk8.6.1,然后再次运行configure脚本,但警告消息仍然存在.
我找到tkConfig.sh了~/Downloads/tk8.6.1/unix/,所以我将它复制到/ usr/local/lib,再次运行脚本,但我得到了:
checking for Tcl configuration... found /usr/local/lib/tclConfig.sh
checking for Tk configuration... found /usr/local/lib/tkConfig.sh
checking for existence of /usr/local/lib/tclConfig.sh... loading
checking for existence of /usr/local/lib/tkConfig.sh... loading
configure: creating ./config.status
config.status: creating Makefile
config.status: WARNING: 'Makefile.in' seems to …Run Code Online (Sandbox Code Playgroud) 如果我有一个调用另一个makefile的makefile,如何让master makefile正确检查下级makefile的依赖项是否已更改?
例如,如果我有规则
server:
@cd $(SERVERDIR) && $(MAKE)
Run Code Online (Sandbox Code Playgroud)
这会在我构建可执行文件"server"的子目录中调用make.但是,如果我更改组成服务器的其中一个文件,则父make不会看到更改并拒绝重建服务器 - "make:`server'是最新的."
如何让master makefile正确检测其中一个相关文件(例如$(SERVERDIR)/server.c)的变化?