Тут є три споріднених використання @
.
В $@
, символ @
є ім'ям автоматичної змінної, яку можна використовувати в правилі. Значення цієї змінної - ціль, яку будує правило.
Коли @
використовується в самому початку рядка рецепту (команди), відразу після символу вкладки, це призводить до того, що команда не буде надрукована, коли вона буде виконана.
Персонаж в @
іншому місці не особливий.
Таким чином, у вашому прикладі побудувати program
:
file
Функція викликається. Він записує залежність цілі ( $^
автоматична змінна) у файл program.in
.
Незалежно від того, яка команда зберігається у змінній CMD
, виконується параметри, що зберігаються у змінній CMDFLAGS
плюс додатковий параметр @program.in
. Що це робить, залежить від того, що CMD
є.
Команда rm program.in
виконується, не попередньо роздруковуючи її.
Кілька команд розглядають параметр, починаючи з @
вказівки на файл, з якого можна прочитати більше параметрів. Це DOS-конвенція, яка виникла через те, що DOS мав суворий ліміт довжини командного рядка і ніякого способу інтерполювати висновок команди в командний рядок. У світі Unix це рідкість, оскільки Unix не має цих обмежень. Таким чином, ефект від рецепту такий же, як і
$(CMD) $(CMDFLAGS) $(OBJECTS)
>$@.in
він використовується як режим файлів ... але він корисний по-своєму .. дякую cuonglm ...