Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Linux (Ubuntu, Debian, Red Hat, CentOS, Mint)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2013, 11:08   #1
serrgggeee
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 65
По умолчанию утилита make

здравствуйте я хочу воспользоваться утилитой make иду обучение по учебнику вот что я имею
Код:
#!/bin/sh
# Makefile for printup
printup: print_up.o main.o
gcc -o printup print_up.o main.o
print_up.o: print_up.c print_up.h
gcc -c print_up.c
main.o: main.c
gcc -c main.c
clean:
rm -f *.o
rm -f printup
файл назвал Makefile
все файлы который здесь указанны работаю нормально я все это компилировал и компоновал в ручную, вот что я должен сделать по указанию ввести копирую прям из книжки
"Далее вызываем утилиту make с указанием цели, которую нужно достичь. В нашем
случае это будет выглядеть так:"
$ make printup
gcc -c print_up.c
gcc -c main.c
gcc -o printup print_up.o main.o
я пробовал и просто make printup и файл не Makefile назвать а printup но нечего не получается, что то недопонял
serrgggeee вне форума Ответить с цитированием
Старый 26.12.2013, 12:58   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

<Частично удалил глупости>

У вас с синтаксисом проблемы - нет табуляции где надо.

Код:
цель: зависимости
[tab] команда
p.s.

И не нужно писать в начале файла #!/bin/sh ибо это "подсказка", что этот файл следует открывать с помощью программы /bin/sh (т.е. этой надписью как бы утверждаете что этот файл шеллскрипт, который нужно интерпретировать програмой /bin/sh. А это не шеллскрипт). Для make, скорее всего, эта запись просто комментарий и она никак не должна повлиять на его работу.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 26.12.2013 в 14:52.
ROD вне форума Ответить с цитированием
Старый 26.12.2013, 13:43   #3
serrgggeee
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 65
По умолчанию

что то я не понял что значит .h файлы не нужно вписывать в Makefile. Это значит что должно выгляедеть все так
Код:
# Makefile for printup
printup: print_up.o main.o
gcc -o printup print_up.o main.o

gcc -c print_up.c
main.o: main.c
gcc -c main.c
clean:
rm -f *.o
rm -f printup
тогда я не пойму как этот скрипта работает, если я понял то он по ступенька проверяет зависимость файло и если есть то выпоняет действие а если я удалил это строчку
Код:
print_up.o: print_up.c print_up.h
как он поймет что нужно делать это
Код:
gcc -c print_up.c
и еще момен как реализовать это
Код:
$ make printup
gcc -c print_up.c
gcc -c main.c
gcc -o printup print_up.o main.o
прото писат все в строчку или я что то не понял
serrgggeee вне форума Ответить с цитированием
Старый 26.12.2013, 14:50   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Такс... прошу прощения, на счет *.h файлов я ввел вас в заблуждение. (Праздники же.. кхе-кхе-кхе)

Что касается

Код:
$ make printup
gcc -c print_up.c
gcc -c main.c
gcc -o printup print_up.o main.o
Похоже, что первая строчка - команда, а последующие - тупо вывод самого make. (неужели за все это время вы не попробовали хоть какой-нибудь вариант запустить?).
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 26.12.2013 в 14:54.
ROD вне форума Ответить с цитированием
Старый 26.12.2013, 15:05   #5
serrgggeee
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 65
По умолчанию

я все испробовал щас покажу что выводит терминал
Код:
serrrgggeee@serrrgggeee-Satellite-L40:~$ make printup
Makefile:4: *** missing separator.  Stop.
serrrgggeee@serrrgggeee-Satellite-L40:~$
serrgggeee вне форума Ответить с цитированием
Старый 26.12.2013, 15:13   #6
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Хм.. А что конкретно в это Makefile?

Если как в предыдущем посте:
Код:
# Makefile for printup
printup: print_up.o main.o
gcc -o printup print_up.o main.o

gcc -c print_up.c
main.o: main.c
gcc -c main.c
clean:
rm -f *.o
rm -f printup
То строчку 4 (пустая строка) удалите.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 26.12.2013, 15:40   #7
serrgggeee
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 65
По умолчанию

ладно я не могу объяснить может тогда так у меня есть исходники
это главный
Код:
#include <string.h>
#include <stdio.h>
#include "print_up.h"
int main (int argc, char ** argv)
{
if (argc < 2) {
fprintf (stderr, "Wrong arguments\n");
return 1;
}
print_up (argv[1]);
return 0;
}
это привязанный
заголовочнй файл print_up.h
Код:
void print_up (const char * str);
ну и тело функции
Код:
#include"ctype.h"
#include"stdio.h"
#include"string.h"
#include"print_up.h"
void print_up (const char * str)
{
int i;
for (i = 0; i < strlen (str); i++)
printf ("%c", toupper (str[i]));
printf ("\n");
}
если компилировать по отдельности то нужно сделать вот что
$ gcc -c print_up.c
$ gcc -c main.c
и потом
$ gcc -o printup print_up.o main.o
а как это реализовать при помощи make я не знаю но указанно что нужно написать файл
Код:
# Makefile for printup
printup: print_up.o main.o
gcc -o printup print_up.o main.o
print_up.o: print_up.c print_up.h
gcc -c print_up.c
main.o: main.c
gcc -c main.c
clean:
rm -f *.o
rm -f printup
и запустить
Код:
$ make printup
serrgggeee вне форума Ответить с цитированием
Старый 26.12.2013, 21:04   #8
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

http://www.opennet.ru/docs/RUS/zlp/002.html#3

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 27.12.2013, 08:03   #9
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Да, к стати, про табуляции я вам уже говорил.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Make Notan1310 Qt и кроссплатформенное программирование С/С++ 0 01.04.2012 21:13
mingw32-make _Bers Общие вопросы C/C++ 0 21.02.2012 10:08
Не распознает make. Lunex.08 Qt и кроссплатформенное программирование С/С++ 5 08.08.2010 16:25