2012-02-28 5 views
0

私が持っている以下のメイクファイルとディレクトリツリー:いくつか配置されたフォルダとプロジェクトのメイクファイルを書く

- >プロジェクト/ SRC/main.cの、func.c、 Makefileの

- >プロジェクト/ EXE/

- >プロジェクト/ INC/

- >プロジェクト/ OBJ/

cc=gcc 
    cflags=-c 
    obj=../obj 
    exe=../exe 
    inc=../inc 
    prog.exe: main.o func.o 
     $(cc) main.o func.o -o $(exe)/prog.exe 
    main.o: main.c $(inc)/defs.h 
     $(cc) $(cflags) main.c 
     mv main.o $(obj)/ 
    func.o: func.c $(inc)/defs.h 
     $(cc) $(cflags) func.c 
     mv func.o $(obj)/ 

問題は、main.oとfunc.oの2番目のアクション(mvで始まるアクション)が動作しないことです(main.oは/ objディレクトリに移動しません)。 makefileや他の何かの構文に問題はありますか?

+0

「動作しません」:問題をより正確に記述してください。バッテリーを持たないエナジャイザーバニーとチャレンジャーの宇宙船は、どちらも「うまくいかない」が、まったく異なる方法で動作します。 – thiton

+0

CC、CFLAGSなど(すべての大文字と小文字を区別する)を使用することは、長年にわたり行われています。これらは、暗黙のルールを使用するため、多くの場合ルールを指定する必要さえありません。違う名前を使って慣例を誇示するのは賢明ではありません。 –

+0

それは練習 – woryzower

答えて

1

を参照してください。すなわち:

prog.exe: main.o func.o 
    $(cc) main.o func.o -o $(exe)/prog.exe 

むしろ、それは別のファイルである、$(exe)/prog.exeを構築し、prog.exeを構築しません。この修正は、次のようになります。

$(exe)/prog.exe: $(obj)/main.o $(obj)/func.o 
    $(cc) $^ -o [email protected] 

重複や愚かなタイプミスを避けるために、入力ファイルと出力ファイルの名前のautomatic variablesを使用して好みます。

+0

はい、問題は解決しませんでした。 main.oは移動できませんでした。 – woryzower

+0

あなたはそれを解決したのでそれを受け入れましたか? –

+0

あなたが気づいた明らかな問題はありませんでした – woryzower

0

あなたはmakeでインデントを処理することができます。本当のタブが必要です。

は一つの明白な問題はメイクファイルは、構築するはずのターゲットをビルドしないということであるhttps://superuser.com/questions/224434/what-is-the-character-used-to-indent-the-make-file-rule-recipe

+0

main.oのためだけの素朴な試みだった @WilliamPursell:のmain.cの$(INC)/defs.h $(CC)$(CFLAGS)main.cの MV main.o $( obj)/ にはまだ問題があります。 – woryzower

関連する問題