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を使用している場合は、2行目を変更するだけです。

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