2012-03-05 10 views
2

私はネイティブコードを含むアンドロイドプロジェクトに取り組んでいます。私はNDKでKiss FFTライブラリを使用しようとしています。しかし、私はKiss FFTで使われているmakefileの以下の部分を理解するのが難しいです。誰かが私にこれを説明することはできますか?メイクファイルレシピを理解する

最初の行はターゲットkiss_fft.sとその前提条件を定義しており、次の4行はレシピであることがわかります。3.4.はコンパイラコマンドです。しかし、私はライン2.5.

1. kiss_fft.s: kiss_fft.c kiss_fft.h _kiss_fft_guts.h 
2. [ -e kiss_fft.s ] && mv kiss_fft.s kiss_fft.s~ || true 
3. gcc -S kiss_fft.c -O3 -mtune=native -ffast-math -fomit-frame-pointer -unroll-loops -dA -fverbose-asm 
4. gcc -o kiss_fft_short.s -S kiss_fft.c -O3 -mtune=native -ffast-math -fomit-frame-pointer -dA -fverbose-asm -DFIXED_POINT 
5. [ -e kiss_fft.s~ ] && diff kiss_fft.s~ kiss_fft.s || true 

を理解していない任意の助けいただければ幸いです!

+0

角括弧はテストを表します。 'man test'は 'test'コマンドについて学ぶ場所です。 &&と|| 'and'と 'or'演算子です。条件付きで別のコマンドを実行するのに共通のスクリプトイディオムを使用します。 2行目は.sファイルが存在すればテストして、そうであればバックアップに移動します.s〜else continue( 'true')。 5行目は、bkup .s〜が存在する場合、それと現在の.s elseの間にdiffを表示し続けます。 &&はif thenと||を行います。もう一人です。 –

答えて

3

2.は、アセンブリコード(kiss_fft.s)が存在すればそれをバックアップファイルに移動し、そうでなければ真の状態を返し、次の行が実行されます。

5.には、以前の出力がある場合(gss_fft.s〜にステップ2.で移動した場合)、gccの以前のアセンブラ出力と現在の出力の違いが表示されます。

+1

+1:そして '||真の部分は、全体のコマンドが成功するようにします。例えば、行2が実行されるときに 'kiss_fft.s'というファイルがない場合、' make'は処理を停止しません。 –