2011-12-29 11 views
2

次のシナリオmakefileはビルドされたすべてのオブジェクトを自動的にdistディレクトリに移動できますか?

# Link to executable 
result: file1.o file2.o 
    gcc dist/file1.o dist/file2.o -o dist/result23 

# Assemble to .o object files 
file1.o: file1.s 
    gcc -c dist/file1.s 
    mv file1.o dist 

file2.o: file2.s 
    gcc -c dist/file2.s 
    mv file2.o dist 

# Compile to .s assembly files 
file1.s: file1.c 
    gcc -S file1.c 
    mv file1.s dist 

file2.s: file2.c 
    gcc -S file2.c 
    mv file2.s dist 

は、あなたがその各段階の後に、私mv $some_file distわかります考えてみましょう。 "once done、dist directoryに結果を移動する"ことをグローバルに宣言できますか?

答えて

3

いいえ、Makefileの目的を無効にするため、Makefileの一般的なルールはありません。ターゲットファイルを移動することによって、次のmakeの実行時に強制的に(不要な)リメイクを実行します。

通常のイディオムはここallinstallです:allターゲットは、彼らの最終目的地に現在のビルドツリー内のすべてのターゲット、およびinstallターゲットコピー、それらを構築します。

特定のディレクトリ(ソースディレクトリなど)に生成されたファイルが存在しないようにする場合は、キーワード「アウトトゥーツリービルド」を使用すると良いヒントが得られます。

+0

'all'と' install'を使って例を挙げてもらえますか? – JAM

+1

@ JAM:[Felix Cruxは、基本的なMakefileの作成について素敵な記事を書いています。](http://www.felixcrux.com/posts/creating-basic-makefile/) – thiton

関連する問題