2011-12-30 212 views
2

我有以下目录结构:隐生成规则:GNU进行多次的Makefile多目录

. 
.. 
./Graphic/ 
./Graphic/SymbolXLib 

有在这个项目中其他几个目录,但我不会列出他们的纯朴sake.I希望主makefile驱动其他Makefiles的构建存储在自己的目录中。有几个项目合并在一起,所以我不能只是移动源代码。

[[email protected] Core]$ cat ./Makefile 
CORE_LIBS_DIR = libs 
OBJS_DIR = obj/symb_obj 
include ./Graphic/SymbolXLib/Makefile 

的图形生成文件中被定义为:

为主体的生成文件定义

# 
# make BUILD_MODE={release|debug} OS_ARCH={32|64} 
# 
# default is 32-bit release build 
# 
BUILD_MODE = release 

OS_ARCH = 64 

OBJS_DIR = $(BUILD_MODE)$(OS_ARCH) 

SRC = \ 
    ./Graphic/SymbolXLib/CartoCursor.cpp \ 
    ... 
    ./Graphic/SymbolXLib/TextureConversion.cpp \ 
    $(NULL) 

CC = gcc -fPIC 
OBJS = $(SRC:%.cpp=$(OBJS_DIR)/%.o) 

COPTS = -m$(OS_ARCH) -O2 

CDEFS = -DLINUXx86 \ 
     -I../../../SharedArcGIS/Include/GraphicsPipeline/Display/SymbolX/SymbolXLib \ 
     -I../../../SharedArcGIS/Include/System/Geometry/GeometryXLib \ 
     -I../../../ArcSDE/pe/include \ 
     -I../../../ArcSDE/shape/include 

CFLAGS = $(COPTS) $(CDEFS) $(CINCS) 
TARGET = libSymbolXLib.a 

all : $(OBJS_DIR) $(OBJS_DIR)/$(TARGET) 

$(OBJS_DIR) : 
     mkdir -p $(OBJS_DIR) 

$(OBJS_DIR)/$(TARGET) : $(OBJS) 
     ar qc [email protected] $^ 

$(OBJS_DIR)/%.o : %.cpp 
     $(CC) -c $(CFLAGS) -o [email protected] $< 

如果我搬来搬去的很多事情在以前的帖子(Previous Post)的回应不仅帮助。我不能这样做。所以问题仍然存在,我如何才能从主Makefile的子目录中识别隐式构建?

我得到的错误是

make: *** No rule to make target `release64/./Graphic/SymbolXLib/CartoCursor.o', needed by `release64/libSymbolXLib.a'. Stop. 

回答

3

如果您避开include而不是recursive make,我必须认为您会有更好的成功。在顶层Makefile,是这样的:

graphic: 
    $(MAKE) -C Graphic 

而且在Graphic/MakefileMakefile都可以有子项目:

symbolxlib: 
    $(MAKE) -C SymbolXLib 

等。您可能需要将每个目标添加到默认目标或类似的东西,以将它们全部挂在一起执行。你可以给每个目标一个实际的依赖关系(它们应该是.PHONY:,如果它们没有依赖关系的话......)只在需要的时候重建它们,或者当一个上层目标指令到touch(1)“命令文件” 。

另外,this paper建议不同的方法来避免递归make,但我从来没有读过 - 并发现递归make作品在项目不够好,我去过的那部分我不介意推荐它。

+0

您好!我可以问你对这个相关的问题的意见:http://stackoverflow.com/questions/24573413/make-setting-up-build-environment-for-multi-directory-research-workflows? (请在右侧的面板中查看我链接的问题。)谢谢! – 2014-07-05 14:02:58