2014-03-19 51 views
0

我想在可执行文件编译过程中链接我生成的所有对象,但我似乎无法自动选择生成目录。链接生成文件中的子目录中的对象

我曾尝试:

test: $(OBJECTS) 
    $(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) $(BUILDDIR)/$^ test.cpp -o test.exe 

的问题是,$(BUILDDIR)/$^仅在第一目标文件的前面插入$(BUILDDIR)

我应该怎么做?

回答

1

如果你想添加$(BUILDDIR)直接在命令的所有先决条件,那么你可以做:

test: $(OBJECTS) 
    $(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) $(addprefix $(BUILDDIR)/,$^) test.cpp -o test.exe 

然而,建立制定规则,这样就意味着你没有正确地跟踪依赖关系。我想你真正想要的是这样的:

test: $(addprefix $(BUILDDIR)/,$(OBJECTS)) 
    $(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) $^ test.cpp -o test.exe 
+0

太棒了。这就是它。尽管我认为在这种情况下我只会定义'OBJECTS = $(addprefix $(BUILDDIR)/,$(SOURCES:.cpp = .o))'。任何理由不这样做? – Wilsonator

+0

没有理由不。我认为把它放在这样一个单独的变量中甚至更加整洁。 – hetman

相关问题