6

すべてのソースファイルがSourceフォルダーにあり、makefileがMakefileフォルダーにあり、すべてのオブジェクトファイルをObjectsフォルダーに配置したいと考えています。iamが取り組んでいるCプロジェクトです。これら3つのフォルダーはすべて、Projectという名前のフォルダーにあります。

プロジェクトフォルダには次のものが含まれます:ソースMakefileオブジェクト

iamは、makefileを取得してSourceフォルダーからソースをコンパイルする方法を見つけようとしています。私は以下を使用してみました。

...
SOURCE_DIR=..\Source
OUTPUT_DIR=..\Objects
.c.obj:
    $(CC) $(SOURCE_DIR)\$*.c /Fo$(OUTPUT_DIR)\$*.obj
...  

しかし、これは機能していません。myfile.objの作成方法がわからないと言っているときにエラーメッセージが表示されます。

4

4 に答える 4

6

これを試して:

SOURCE_DIR=..\Source
OUTPUT_DIR=..\Objects
{$(SOURCE_DIR)}.c{$(OUTPUT_DIR)}.obj:
    $(CC) $* /Fo$<

ここで説明されているように:http://msdn.microsoft.com/en-us/library/hk9ztb8x.aspx

于 2010-01-06T00:30:49.670 に答える
1

ターゲットを追加し、現在のディレクトリを目的のファイルを作成したいディレクトリに変更する必要があります。nmake サンプルの Makefile ファイルは次のとおりです。サンプルでは、​​nmake は現在のディレクトリから ac bc をコンパイルし、objs $(OBJ_FILES_DIR) ディレクトリを配置し、$(OUTDIR) ディレクトリに SOME_STATIC.LIB を構築します。

# commmand to launch Makefile
nmake OBJ_FILES_DIR=my_obj_dir OUTDIR=my_lib_dir

# Makefile
STATICLIB = SOME_STATIC.LIB
OBJS = a.obj b.obj # objs in lib
O = $(OBJ_FILES_DIR)
S = $(MAKEDIR)  # remember source dir where a.c b.c reside and current    dir from which nmake launched.

.PHONY: $(STATICLIB)
.PHONY: CHDIR

$(STATICLIB): CHDIR $(OUTDIR)$(STATICLIB) # 

CHDIR:
    -md $(O) 
    cd $(O)

all: $(STATICLIB) 

$(OUTDIR)$(STATICLIB): $(OBJS)
    $(AR) $(ARFLAGS) -out:$@ $(OBJS)

{$(S)}.c.obj::
    $(CC) $(WFLAGS) $(CFLAGS) -c $<
于 2015-06-08T20:59:00.810 に答える
0

文字通り と表示されていてdon't know how to make myfile.obj、そうでないdon't know how to make ..\Objects\myfile.obj場合は、別の場所に問題があります。makefile の何かが、現在のディレクトリにあるオブジェクト ファイルを要求しています。

myfile.obj をビルドする必要があるルールは何ですか? $(OUTPUT_DIR)\myfile.objそのルールでは、依存関係として指定できていないと思います。

于 2010-01-07T00:38:45.227 に答える
0

Visual Studio を使用している場合、次のエラー メッセージが表示されることがあります。

「「.obj」の作り方がわからない」

「Makefile」を開き、「Visual Studio 2010 でコンパイルして 32 ビット バイナリを出力するときにこれらのコメントを解除する」というコメントの下の行のコメントを解除することで、これを解決できました。Visual Studio のバージョンとアーキテクチャ (32 ビット/64 ビット) に対応するコメントを見つけて、その下の行のコメントを外します。

于 2012-10-17T02:53:59.910 に答える