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