2012-06-19 96 views
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 

讓我知道如果任何重要的信息丟失,我會盡我所能來更新我與它的問題。

+0

你知道你正在使用什麼版本的製作? (你可以通過'make -v'找到。) – Beta

回答

0

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

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