2014-02-04 3 views
5

компилировать следующую программуКак написать Makefile, чтобы скомпилировать простую С Программой

#include <stdio.h> 
int main(void) 
{ 
    printf ("Hello from your first program!\n"); 
    return 0; 
} 

а) его используя файла типа Makefile

б) -The исполняемый файл будет называться Hello

«Помогите сделать упражнение. Я знаю, как это сделать в CodeBlocks, но я не знаю, что такое Makefile и как его записать в Linux. Я скомпилировал его с помощью команды« gcc filename.c »и впоследствии». /a.out ", но я до сих пор не понимаю, что такое Makefile. Является ли это своего рода скриптом оболочки, инструкцией? Как будет выглядеть Makefile для этой задачи? Заранее спасибо :) "

+8

Вы пробовали прибегая к помощи [Makefile учебник] (https://www.google.de/search?q=makfile+tutorial&ie=utf-8&oe=utf-8&aq = т & RLS = org.mozilla: ан-ГБ: официальный и клиент = светлячок-а & канал = fflb & gfe_rd = CR & е = T7PwUrOHL4Td_AbPooGIAQ)? – RedX

+0

Вы пробовали [Учебник CMake] (http://www.cmake.org/cmake/help/cmake_tutorial.html)? – yegorich

+0

По какой-то причине низкоуровневые программисты участвуют в StackOverflow, но считают, что это не подходящее место для предоставления хороших ответов и обучения тех, кто не знает, только для того, чтобы быть циничным и предоставлять ссылки или предлагать читать man-страницы ¯ \ _ (ツ) _/¯ –

ответ

7

Makefile рецепт для make утилиты, как создать какой-либо файл (так называемый цели) от некоторых других файлов (так называемая зависимость) с помощью набора команд запуска оболочки . файл сборка, как правило, выглядит следующим образом:.

target: dependency [...] 
     command1 
     command2 

Попробуйте запустить man make для деталей

Теперь для вашей задачи, на самом деле нет никакой необходимости в Makefile, поскольку make имеет встроенные правила, знаете, как скомпилировать простую программу. Все, что вам нужно сделать, это поместить ваш источник C в файл с именем после имени исполняемого файла (Hello) и с расширением .c, то есть Hello.c.

Тогда простой

$ make Hello 
cc  Hello.c -o Hello 

делает все. Если вы хотите использовать GCC вместо куб.см, вы можете запустить

$ rm Hello 
$ make CC=gcc Hello 
gcc  Hello.c -o Hello 

Если вы сообщите инструктор/учитель/проф что пустой Makefile все, что вам нужно, так как вы знаете, встроенные правила делают правильные вещи, вы получите дополнительный кредит, и, может быть, ваш преподаватель узнал что-то новое :-) Если вас попросят дать ссылку, вы можете процитировать соответствующие части руководства по make или сделать это как про, цитату из POSIX Standard for the make utility, раздел Правила по умолчанию.

+0

Большое спасибо. Просто чтобы убедиться, что все правильно. Сначала я создал Hello.c, используя nano и мой исходный код, затем я сохранил и вышел из него и набрал ('make Hello') в консоли терминала (ofLinux/Unix), и я получил (' cc Hello.c -o Hello ') под моей командой. Поэтому я предполагаю, что cc (для компиляции c) и (-o is sth, если ссылка помещает исполняемый вывод в выходной файл, но что он на самом деле делает/означает в обычных словах (компилирует Hello.c и дает пустой вывод Команды makefile bu по умолчанию?) Но тогда я запускаю ту же команду ('make Hello'), и она дала (' make: 'Hello 'is date .') – Zhivago

+0

' make' компилировать ваш файл 'Hello.c' и создайте двоичный файл в соответствии с именем вашего файла. Если вы снова дадите команду 'make', тогда он будет искать изменения в вашем файле' Hello.c', если не будет найден, тогда просто выведите 'Hello is upto date' –

+0

@ Zhivago Когда вы запустите make во-вторых, он проверяет, является ли зависимость моложе цели. Если это так, она запускает команды. Если нет, нечего делать, и говорит, что «Hello is up to date». Умный достаточно, чтобы знать, что если Hello.c не изменился, нет необходимости компилировать его. Это все, что нужно сделать: выполнить минимальную работу, необходимую для обновления цели. Если вы коснетесь Hello.c 'или' rm Hello', он перекомпилит. – Jens

1

Файл makefile - это рецепт для компьютеров с инструкциями по выполнению определенных задач и зависимостей между этими задачами.

В простой форме это выглядит так:

a.out: filename.c 
     gcc filename.c 

чтения: «Для того, чтобы построить a.out из filename.c, запустите команду gcc filename.c Если a.out новее filename.c, то ничего не делать.»

Примечание: первый символ в строке gccдолжен быть вкладкой.

7

Это ваш простой файл make для программы приветствия.

CC  = gcc 
CFLAGS = -g 
RM  = rm -f 


default: all 

all: Hello 

Hello: Hello.c 
    $(CC) $(CFLAGS) -o Hello Hello.c 

clean veryclean: 
    $(RM) Hello 

Предположим, у вас есть два makefiles в один каталог с именем makefile.m1 и makefile.m2 и если вы хотите построить и сделать файл, пожалуйста, используйте следующие команды

make -f makefile.m1 
make -f makefile.m2 

или использовать единый Makefile, который содержит:

m1: 
    make -f makefile.m1 

m2: 
    make -f makefile.m2 

и использовать make m1 или make m2

Теперь давайте четкие ваши сомнения по поводу имени макияж файла не должен требовать Makefile

Вы можете назвать Makefile, что вы хотите. предположим, я хотел бы назвать имя myfirstmakefile.mk. Чтобы использовать его позже, вам нужно сообщить, какой makefile вы хотите. Используйте опцию -f для этого:

make -f myfirstmakefile.mk 

И снова extantion .mk также не вы можете прохождении обязательной использовать все, что вы хотите, но никогда не забывал использовать -f вариант.

так что это может иметь смысл для вас.

+0

Большое спасибо. С какой командой оболочки unix вы начали? Вы сначала вошли в nano Hello. c (написал программу Hello world и напечатанный файл nano Hello.makefile, или каковы были ваши шаги с самого начала? – Zhivago

+0

Я написал это в файл с именем 'mkmk', используя nano, и когда я набрал' make mkmk', он говорит: 1make: ничего по умолчанию', но почему – Zhivago

+1

Нет, в linux ju st copy над кодом в новом файле с именем 'Makefile', а также сделать программу' Hello.c' в том же каталоге, где выше 'Makefile' вы помещаете. Теперь с терминала перейдите в этот каталог и просто введите' make' для сборки 'Hello.c 'и' make clean' для очистки вывода. –

1

, прежде чем для Makefile вы должны знать, что это такое и зачем оно нам нужно

Что такое Makefile?

Makefile - это скрипт, написанный в определенном предписанном синтаксисе, который помогает создавать целевой вывод (обычно один или несколько исполняемых файлов) из исходных файлов путем компиляции и компоновки. Простыми словами, makefile скомпилирует ваш исходный код простым способом &. Почему нам нужен Makefile?

=> Крупные проекты могут содержать несколько исходных файлов, которые зависят друг от друга или расположены иерархически, например, чтобы скомпилировать файл A, вы должны сначала скомпилировать B; для компиляции B вы должны сначала скомпилировать C; и так далее.

=> Make - решение этих проблем. Он может использоваться для компиляции всего проекта в хорошо организованном виде и генерации вашей цели в соответствии с вашим правилом make (что мы обсудим позже), введя одну команду, которая является make.

=> Важная особенность заключается в том, что при перекомпиляции проекта после нескольких изменений он будет перекомпилировать только те файлы, которые были изменены, и любые другие файлы, зависящие от него. Это экономит много времени.

=> Для большого проекта, когда в источник внесены несколько изменений, ручная перекомпиляция всего проекта каждый раз утомительна, подвержена ошибкам и занимает много времени.

Вот хорошая ссылка на него: How to write first makefile

Смежные вопросы