2012-03-05 1 views
2

Я работаю над проектом Android, который включает в себя собственный код, и я пытаюсь использовать библиотеку Kiss FFT с NDK. Тем не менее, мне трудно понять часть, указанную ниже, в файле makefile, используемом Kiss FFT. Может кто-то объяснить это мне?Понимание рецепта makefile

Я знаю, что первая строка определяет цель kiss_fft.s и его предпосылки и что следующие четыре строки рецепт, из которых линии 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' - это место, где можно узнать о команде« тест ». && и || являются операторами «и» и «или»; это обычная идиома скрипта, чтобы использовать их для выполнения одной команды, за которой следуют условно другое. Строка 2, по-видимому, является «проверкой, если файл .s существует, если переместить его в резервную копию .s ~ else continue (« true »). Строка 5, если существует bkup .s ~, показывает разницу между ней и текущим .s else continue. && делают «if then» и || это другое. –

ответ

3

Линия 2. перемещает код сборки (kiss_fft.s) в файл резервной копии, если он существует, в противном случае возвращает истинный статус, поэтому следующая строка будет выполнена.

Линия 5. показывает отличия между предыдущим выходом ассемблера от gcc и текущим выходом, если был предыдущий выход (перемещен в kiss_fft.s ~ по шагу 2.).

+1

+1: И '|| true' гарантирует, что общая команда будет успешной, так что 'make' не прекратит обработку, если, например, файл' kiss_fft.s' отсутствует, поскольку выполняется строка 2. –