2010-10-26 7 views
4

Эй, я новичок в C, но программист среднего уровня в целом. Я ищу, чтобы создавать файлы и проблемы с выяснением, для чего они предназначены, и как их использовать. Так, например, я в настоящее время компиляции каждого из моих файлов в моем проекте индивидуально, набрав:Простой вопрос о файле (C)

gcc -o newoutfilename1.out oldcfilename1.c 
gcc -o newoutfilename2.out oldcfilename2.c 

А что, если я просто хочу, чтобы запустить сделать файл, чтобы собрать их все сразу. Я не хочу помещать их всех в один файл в конце, видя, как они не связаны. Также идет еще больше. Могут ли файлы makefile использоваться для тестирования. Как после я компилировать newoutfilename1.out я хочу запустить:

./newoutfilename1.out arg1 arg2 arg3 > intothisfile.data 

Вообще делает мою жизнь легче при кодировании и тестирования, если код компилируется и из ставит правильные данные.

+0

Я думаю, что вы Мент: * НКУ -o newoutfilename1 oldcfilename1.c * и * НКУ -o newoutfilename2 oldcfilename2.c * – karlphillip

+0

Насколько мой опыт идет я могу назвать Outfile ничего Прошу. Я ошибаюсь? Или, может быть, ваше высказывание, поскольку они независимы, там нет объектных файлов, тогда да, вы правы. Я отредактирую. –

+0

Да, это имя, это не важно для большинства линкеров. однако компилятор может рассердиться, если вы укажете исходный файл с неизвестным суффиксом. – Marm0t

ответ

3

В Interwebs есть несколько учебников GNU Make. Google показал несколько хитов. Вы можете начать с this one.

+0

Я предполагаю, что мой вопрос был еще более важным: важно ли вы не скомпилировать все свои файлы в один файл в конце? и можете ли вы выполнить файл out в файле make? –

+1

Да, вы можете связать скомпилированные объекты в один исполняемый файл (с помощью ln или вашего компилятора - обычно ваш компилятор использует ln-linker) - см. Сообщение Анджела. Вы не можете выполнить внешний файл, если в файле не указано «главное». Чтобы проверить, что вы должны скомпилировать все в один исполняемый файл, тогда проверьте его (вот почему люди злятся на порочный процесс редактирования, создания, запуска, отладки) – Marm0t

+0

@ Marm0t Желаю, чтобы я мог принять ваш комментарий в качестве ответа, но, принимая ответ, комментарий был дальше придется делать. –

3

Ну,

, что ссылка, которую вы дали, Келин, вы все равно читать?

Честно говоря, если бы я не написал несколько 100 файлов в моей жизни, я бы не понял ни одного слова в этой публикации, которую вы связали.

Файл makefile - это особый скрипт.

Каждая строка выглядит следующим образом:

target: depends-on.c and.h and-even-another.h 
    command -o target depends-on.c 

Первая строка все файлы, вторая строка представляет собой команду, чтобы создать файл перед «:»

Так это файл. Если цель старше, чем «depend-on.c» или «and.h» или «and-even-another.h», тогда выполняется команда во второй строке (при условии, что она создаст/регенерирует/выводит целевой файл) '), обычно эти файлы называются target.o, если они скомпилированы из исходного файла.

Другими словами: одна строка для описания вывода, после двоеточия файлы, на выходе которых зависит, а во второй строке - команда для создания вывода.

Вещь слева от ':' называется «целью».

Цели могут зависеть от других целей.

Вы можете использовать подстановочные знаки.

*.o: *.c 
    cc -o "something you have to look up, dont now it from my mind ;D" 

program: *.o 
    ln *.o my.lib another.lib 

выше компилирует только те * .c файлы, которые новее, чем соответствующие * .o файлы, а затем связывает все * .o файлы вместе с двумя названных библиотеками.

Если вы находитесь на машине linux/unix, попробуйте «man make». В противном случае Google; D

Angelo

+0

Хороший учебник! Почти все те, что я нашел, совершенно нечитаемы для noob, как и связанный. Твой довольно приличный. –

+0

Ум, на самом деле, да, я * * * прочитал этот учебник кратко, прежде чем рекомендовать его ... Я думал, что это очень хорошая работа по обобщению конструкций Makefile, которые я действительно нашел полезными на протяжении многих лет. Я дам, что это написано в несколько академическом стиле, но я ожидал бы, что большинство читателей SO будут использоваться с текстом CS ... :-) –

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