Какой самый простой MAKEFILE у меня может быть работ для одного файла C? - PullRequest
13 голосов
/ 28 ноября 2010

У меня есть файл с именем "main.c".Какой самый простой Makefile, который у меня есть, чтобы скомпилировать этот файл в исполняемый файл, который я могу запустить как ./blah?

Ответы [ 5 ]

12 голосов
/ 28 ноября 2010
all:
     gcc -o blah main.c

Вам не нужен make-файл, простой сценарий оболочки в порядке.

10 голосов
/ 28 ноября 2010

Если вы используете GNU Make и вам не нужно ссылаться в дополнительных библиотеках, самый простой make-файл вообще не является make-файлом. Попробуйте:

make main

Если вы не хотите указывать main, тогда вы можете использовать следующий однострочный Makefile:

all: main

В GNU Make есть несколько неявных правил, которые он использует, если вы сами их не определяете. Тот, кто делает эту работу, выглядит примерно так:

%: %.c
        $(CC) $^ -o $@

Подробнее см .: http://www.gnu.org/software/make/manual/make.html#Using-Implicit

4 голосов
/ 28 ноября 2010
all: blah
blah: main.c
    gcc main.c -o blah
2 голосов
/ 28 ноября 2010

Самое простое, что я бы порекомендовал:

myprog: myprog.o
        $(CC) -o $@ @^

Через неявные правила это приведет к отдельному шагу, который компилирует myprog.c в myprog.o перед его связыванием.Причина, по которой мне нравится этот ответ лучше, чем другой ответ (от Арно), заключается в том, что он масштабируется до большего количества исходных файлов без необходимости значительного увеличения make-файла:

myprog: myprog.o foo.o bar.o helper.o my.o your.o his.o her.o
        $(CC) -o $@ @^
0 голосов
/ 22 января 2015

Как сказал Джандер, если вашим источником является один файл с именем blah.c, вы можете использовать его для вывода исполняемого файла с именем blah:

all: blah

Или даже:

blah:

Все остальное неявно при использовании GNU make

Хотя это чрезвычайно просто, у него есть несколько преимуществ по сравнению с некоторыми из более сложных ответов:

  • Компилятор не является жестко запрограммированным: пусть ваша среда выбирает gcc для вас!
  • Имя вашей программы задается только один раз, что является хорошей практикой СУХОГО программирования.
  • Не создает промежуточные *.o файлы, которые не нужны для этого простого проекта.

Тем не менее, я настоятельно рекомендую вам улучшить свои Makefile, добавив как минимум clean и all правила и -Wall флаги. Это можно сделать с помощью следующего Makefile, сохраняя все вышеперечисленные преимущества:

TARGET=blah
CFLAGS=-Wall

.PHONY: all clean

all: $(TARGET)

$(TARGET):

clean:
    rm -f $(TARGET)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...