如何从路径中删除子目录

时间:2012-06-19 21:43:12

标签: makefile

我对make或makefile脚本一无所知,所以我希望有人可以告诉我需要改变什么。所有其他的包含一个共同的makefile脚本,这段代码似乎负责处理源文件列表(DLL_OBJS)并设置目标来编译它们:

ifdef DLL_TARGET
DLL_REAL_OBJS=$(addprefix $(OBJDIR)/, $(DLL_OBJS:=.$(OBJ))) $(DLL_VERSION_OBJS)
DLL_OUTPUT_FILE=$(OBJDIR)/$(LIBPREFIX)$(DLL_TARGET).$(DYNAMIC_LIB_SUFFIX)
$(DLL_OUTPUT_FILE): $(DLL_REAL_OBJS) $(DLL_NONPARSED_OBJS)
    $(CC) $(CC_SHARED_LIB_FLAGS) $(LD_DYNAMIC) \
        \
        $(LD_DASH_O)$(DLL_OUTPUT_FILE) \
        \
        $(DLL_REAL_OBJS) $(DLL_NONPARSED_OBJS) \
                $(DLL_EXTRA) $(PRELIB) $(LD_FLAGS) \
        $(DLL_REAL_LIBS) $(DLL_NONPARSED_LIBS) $(LD_LIBS) $(DLL_OPTION)
ifdef EMBED_MANIFEST
ifndef SUPPRESS_MANIFEST_DLL
    $(PREMANIFEST) $(MT) \
        \
        $(MANIFESTFLAGS) /outputresource:"$(DLL_OUTPUT_FILE);#2" /manifest $(DLL_OUTPUT_FILE).manifest
endif
endif
endif # DLL_TARGET

问题是如果我这样做:

DLL_OBJS=subdir/main

然后它会尝试将main.obj文件写入WINNT5.0_DBG.OBJ/subdir/main.obj,而我希望它转到WINNT5.0_DBG.OBJ/main.obj。如何修改上面的代码以从目标文件输出路径中排除源文件的子目录部分?我怀疑这些变化需要发生在DLL_REAL_OBJS变量上。

请注意,DLL_OBJS可以是项目列表,例如:

DLL_OBJS=\
  subdir/main\
  subdir/foo\
  bar\
  another_source

如果有任何重要信息缺失,请告诉我,我会尽力用它来更新我的问题。

1 个答案:

答案 0 :(得分:0)

如果你正在使用GNUMake,只需修改第二行:

DLL_REAL_OBJS=$(addprefix $(OBJDIR)/, $(notdir $(DLL_OBJS:=.$(OBJ)))) $(DLL_VERSION_OBJS)