Intereting Posts
Как настроить брандмауэр для тестирования веб-приложений на виртуальной машине? Возможно ли уменьшить информацию в журнале iptables? fluxbox клавиатура switch немецкий, греческий (современный) и политонический греческий Неожиданный конец файла при поиске скрипта “ Как печатать имена символа Unicode для строки ввода? Как добавить номер в качестве аргумента командной строки? Сделать перезапуск OpenVPN при новом сетевом подключении на systemd Как использовать программы пользователями, которые сами не установили их? Записывается в FrameBuffer / dev / fb0, похоже, не меняется графический экран Что делает команда «ls -1»? Как пометить вновь созданный файл с помощью «system_u»? Конфигурация XFRM_SUB_POLICY в kerne Могу ли я автоматически принимать условия лицензии MS SQL при установке пакета yum? Cron на Amazon EC2 centos по-прежнему выполняется даже после удаления Монтирование USB-накопителя – невозможно удалить файлы, если у вас нет прав доступа

Как этот Makefile делает программу C даже без указания компилятора?

Я использовал Makefile из книги « Advanced Linux Programming (2001)» [code] . Мне было странно видеть, что GNU make правильно компилирует код, даже не указав компилятор в Makefile. Это как выпечка без рецепта!

Это минимальная версия кода:

test.c

int main(){} 

Makefile

 all: test 

и сделать действительно работает! Это команда, которую она выполняет:

 cc test.c -o test 

Я не мог найти ничего полезного в документации. Как это возможно?


PS Еще одно примечание: даже язык не указан; Поскольку test.c доступен, GNU make использует cc . Если существует test.cpp или test.cc (при отсутствии test.c ), он использует g++ (а не c++ ).

Сделайте это, используя свои встроенные правила . В них рассказывается, в частности, как скомпилировать C-код и как связать однообъектные программы.

Вам даже не нужен Makefile:

 make test 

будет работать без него.

Чтобы увидеть скрытые правила, которые делают все это возможным, используйте параметр -p без Makefile:

 make -p -f /dev/null 

Как указывал alephzero , у Make были встроенные правила в течение очень долгого времени (если не всегда); Первая версия Стюарта Фельдмана в Unix V7 определяет их в files.c , и в его документе 1979 года упоминается их. Они также являются частью спецификации POSIX . (Это не означает, что все реализации Make поддерживают их – старый Borland Make для DOS не имеет, по крайней мере, до версии 3.0).