0

我希望目标(* .o 和 .a)位于特定目录上,而不是位于当前运行 make 的同一目录上。我从 GUN 中找到以下代码以在特定目录上创建目标;如果我指定 OBJDIR := objdir; 效果很好 但是如果我指定 OBJDIR := /home/user/mytarget,makefile 会失败

 OBJDIR := objdir
 OBJS := $(addprefix $(OBJDIR)/,foo.o bar.o baz.o)

 $(OBJDIR)/%.o : %.c     
            $(COMPILE.c) $(OUTPUT_OPTION) $<

 all: $(OBJS)

 $(OBJS): | $(OBJDIR)

 $(OBJDIR):
            mkdir $(OBJDIR)

我尝试指定像 OBJDIR := $(strip $(TARGET)) 这样的条带,其中我的目标是 /home/user/mytarget。请告诉我,我该如何解决。提前致谢。

4

2 回答 2

0

如果 ,我不知道它是如何工作OBJDIR := objdir的,并且您将无法使用该$(OBJDIR):规则,但我认为此更改将解决您的问题:

$(OBJDIR)/%.o : %.c
    $(COMPILE.c) $(OUTPUT_OPTION) $< -o $@
于 2013-05-22T12:38:23.960 回答
0

最后我得到了答案:我发现声明 TOP_DIR 上有一个空格(用 _ 表示空格)

TOP_DIR := /home/usr/_ 所以当我回应 OBJDIR 时,

DIR := mytarget OBJDIR := $(strip $(TOP_DIR)$(DIR))

OBJDIR = /home/usr/_mytarget

这是错误的;从 TOP_DIR 中删除空间时,它起作用了。

于 2013-05-23T06:40:02.077 回答