Перепечатано из: https://blog.csdn.net/qq_39498080/article/details/79237260
Makefile $ ^, $ @, $, $ & л;?, $ (@ D) $ (@ F) определяется с помощью подробного
Каждый раз, когда я вижу Makefile, там всегда сталкиваются некоторыми переменные не может вспомнить, что вам нужно пойти, чтобы найти информацию, есть время сегодня, на пути к нескольким общим переменным изученным, то, как воспоминания суммированы полному хода, чтобы вспомнить их чувство не сложно, особенно метод для всех, чтобы поделиться.
Определения переменных:
$ ^
Все полагаются на набор целей. Разделенный пробел. Если есть несколько дубликатов в целевой зависимости, что этот переменный
Удаляет повторяющиеся зависит от цели, оставляя только один.
$ @
Правило представления Целевой набор файлов. В правилах модели, если есть несколько целей, то «$ @» является матч
Определение схемы Set целевой
$?
Новый набор целевых все зависимого, чем цель. Разделенный пробел.
$ <
Положитесь первый гол во имя цели. Если цель зависит режим (то есть, «%») определена, то «$ <» будет
Модель в соответствии с серией наборов файлов. Обратите внимание, что вынимают один за другим.
$ (@ D)
Сказал: "$ @" раздел каталога (не слэш в конце), если "$ @" значение "реж / foo.o", затем "$ (@ D)" на
Это «реж», а если «$ @» не содержит косой черты, то его значение «» (текущий каталог).
$ (@ F)
Упомянутый, "$ @" часть файла, если "$ @" значение "реж / foo.o", а затем "$ (@ F)" является "foo.o", "$ (@ F)," фазовый
Когда в функции "$ (notdir $ @)"
Подробный пример:
Там main.C test.c test1.c test2.c четыре исходных файлов
Пример 1:
% .O:% .c
GCC -c $ <-o $ @
Таким образом, компилятор генерирует соответствующий файл с о файле $ <с, принятых от имени каждого файла, файл $ @ C каждого представитель соответствующего объектного файла
Пример 2:
главная: main.o test.o test1.o test2.o
НКУ -o $ @ $ ^
O собрать все основные файлы для создания исполняемого файла, так что $ ^ представляет зависимую набор файлов (main.o test.o test1.o test2.o), @ имя целевого файла (основной)
Пример 3:
Lib: test.o test1.o test2.o
аг г Lib $?
Обновление зависимых файлов в библиотеку Упаковать Lib, если только test1.o обновления, $? Представители Test1.o, если test.o test1.o обновлены, $? Test.o представители test1.o из коллекция.
Краткое описание:
$ ^ Все зависит от множества целей
$? Все зависит от обновления целевой коллекции
$ <Целевой зависящих от первой цели, зависит от определения в режиме (%), вынимают одну за другой
$ @ Целевой файл
$ (@ D) каталог часть $ @
$ (@ F) файлы являются частью $ @
Метод памяти:
ДСТ: source1.o source2.o source3.o source4.o
хх ......
$ ^ Где ^ представляет уровень определенного диапазона, содержащий набор всех зависимых файлов (source1.o source2.o source3.o source4.o)
$? Где? Укажите, какие полагаются обновление файла неизвестны, есть обновленный набор зависимостей (?)
$ <Где <это значение из набора, зависимость первого файла (source1.o)
$ @ Целевой файл (ДСТ)
$ (@ D) каталог часть $ @
$ (@ F) файлы являются частью $ @