我有一个使用GNU Make的C++小型项目。我希望能够把下面的源文件:使用GNU Make制作平面目标文件目录结构输出
src/
a.cpp
b/
b.cpp
c/
c.cpp
到下面的输出结构(我在这一点不担心重复):
build/
a.o
b.o
c.o
到目前为止,我有下面,不幸的是放的.o和.D紧挨着的.cpp:
OBJS := $(foreach file,$(SRCS),$(file).o)
DEPS := $(patsubst %.o,%.d,$(OBJS))
sinclude $(DEPS)
$(OBJS) : %.o : %.cpp
@echo Compiling $<
$(CC) $(CC_FLAGS) $(INCS) -MMD -o [email protected] $<
我知道了$(notdir ...)的功能,但在这一点上我的努力,用它过滤对象失败。任何人都可以对此有所了解吗?这似乎是相当合理的事情。
好的,使用这种方法我可能需要一个额外的规则来创建输出文件夹中的子文件夹? – Justicle 2009-09-02 01:29:14
我最终走下了这条路 - 因为无论如何我需要制作特定于目标和配置的构建文件夹,所以很容易在“构建文件夹”步骤中添加另外几个文件夹。谢谢! – Justicle 2009-09-02 05:28:43
生成文件夹的单独规则应该可以正常工作。但是,我通常所做的只是在命令脚本中添加一个“@mkdir -p $(dir $ @)”行来创建输出目录(如果它尚不存在)作为创建目标文件的一部分( S)。 – 2009-09-02 13:17:38