0

我对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

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

4

1 回答 1

0

如果您使用的是 GNUMake,只需修改第二行:

DLL_REAL_OBJS=$(addprefix $(OBJDIR)/, $(notdir $(DLL_OBJS:=.$(OBJ)))) $(DLL_VERSION_OBJS)
于 2012-06-19T21:55:34.950 回答