Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Проблемы с makefile  (Прочитано 5541 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 6epreu

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Проблемы с makefile
« : 28 Июня 2011, 13:04:51 »
Всем добрый день.

Имеется makefile слудеющего содержания, лежащий вместе с исходными файлами (main.c, list.s, list.h)

PATH=/usr/local
PROGRAM=result
COMPILE=gcc -c
LINK=gcc -o

$(PROGRAM): main.o list.o
$(LINK) $(PROGRAM) main.o list.o
main.o: main.c
$(COMPILE) main.c
list.o: list.c
$(COMPILE) list.c

install:
cp -f $(PROGRAM) $(PATH)

При выполлении команды make в консоли получается следующее:
make: gcc: Команда не найдена
make: *** [main.o] Ошибка 127

В чем собственно дело?

Оффлайн yorik1984

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 1592
  • Кто не хочет, ищет причины
    • Просмотр профиля
Re: Проблемы с makefile
« Ответ #1 : 28 Июня 2011, 13:13:14 »
make: gcc: Команда не найдена
вам же все написали. Нет компилятора gcc
sudo apt-get install gcc

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Проблемы с makefile
« Ответ #2 : 28 Июня 2011, 13:19:59 »
лучше ставить build-essential
помимо голого компилятора надо еще библиотеки, заголовки, итдитп.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн 6epreu

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Re: Проблемы с makefile
« Ответ #3 : 28 Июня 2011, 14:46:44 »
Прошу прощения, что не упомянул самого главного.

"gcc" со всеми библиотеками стоит.

Пользователь решил продолжить мысль 28 Июня 2011, 14:48:20:
к тому же отдельно компилирую файлы в консоли

gcc -c main.c
Все выполняется и так же линкуется

gcc -o result main.o list.o
« Последнее редактирование: 28 Июня 2011, 14:48:20 от 6epreu »

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Проблемы с makefile
« Ответ #4 : 28 Июня 2011, 14:49:56 »
Тогда такого не может быть.
Проверьте, что там все буквы латинские, нигде русской "эс" не затесалось.

что скажет команда
which gcc?

что скажет команда
gcc main.c list.c -o result?

Кстати, в цели install у Вас файл копируется в /usr/local, а надо бы в /usr/local/bin
Ну и выполнять эту цель надо от sudo
sudo make install
Тьфу, бллин!  :2funny:
Ну вот скажите, накой Вам понадобилось PATH переопределять?!
INSTALLDIR = /usr/local
PROGRAM = result
COMPILE = gcc -c
LINK = gcc -o

$(PROGRAM): main.o list.o
$(LINK) $(PROGRAM) main.o list.o

main.o: main.c
$(COMPILE) main.c

list.o: list.c
$(COMPILE) -c list.c

install:
cp -f $(PROGRAM) $(INSTALLDIR)

И все работает! :)

Вообще говоря, так, как Вы, никто не делает.
Если уж понадобилось определить все в переменных, надо различать компилятор и его ключи.
И стандартные имена переменных для таких случаев тоже есть: $CC, $CXX, $CFLAGS, $CXXFLAGS, $LDFLAGS
« Последнее редактирование: 28 Июня 2011, 15:23:14 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн 6epreu

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Re: Проблемы с makefile
« Ответ #5 : 29 Июня 2011, 09:44:58 »
Цитировать
что скажет команда
Код:
which gcc
?

говорит следующее: /usr/bin/gcc

Цитировать
что скажет команда
Код:
gcc main.c list.c -o result
?

Уже упоминал об этом выше. Если просто компилировать без makefile, то компилятор выполняет свою работу корректно.

Цитировать
Кстати, в цели install у Вас файл копируется в /usr/local, а надо бы в /usr/local/bin
Ну и выполнять эту цель надо от sudo

По поводу пути не особо важно, а выполняю от sudo.

Цитировать
Тьфу, бллин! 
Ну вот скажите, накой Вам понадобилось PATH переопределять?!

Вот тут виноват! А собственно за что отвечает PATH?
Объясните пжалуйста, ибо makefile  я решил написать чисто для себя, чтобы в чужих makefile ах можно было ковыряться и понимать приблизительно, что там происходит.

Спасибо, за ответ!!! Попробовал у себя makefile с INSTALLDIR = /usr/local тоже все работат)

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Проблемы с makefile
« Ответ #6 : 29 Июня 2011, 10:58:34 »
Цитировать
Тьфу, бллин!  
Ну вот скажите, накой Вам понадобилось PATH переопределять?!
Вот тут виноват! А собственно за что отвечает PATH?
Переменная окружения PATH задает список директорий, в которых находятся исполняемые файлы.
Попробуйте в командной строке написать
echo $PATH
Пока я не заметил этого, пробовал задать
COMPILE = /usr/bin/gccgcc нашелся и запустился, но заявил что не может найти as

Makefiles, кстати, уже почти не пишутся руками. Чаще они генерируются автоматически.
Так что рекомендую ознакомиться с системами build automation.

Наиболее распространенная сейчас - autotools (порождающая здоровенный скрипт configure, тоже, кстати, автогенерированный из configure.ac и Makefile.am). На пятки ей наступает CMake.

В педивикии можно найти более полный список.
« Последнее редактирование: 29 Июня 2011, 11:06:13 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн 6epreu

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Re: Проблемы с makefile
« Ответ #7 : 29 Июня 2011, 12:18:44 »
нет, если писать COMPILE = /usr/bin/gcc то прокатывает.
Про PATH понял, это такой же PATH как и в винде.

А за обзор софта для генерации мэйков - спасибо. Сам под UNIX пока не пишу, но в скором времени предстоит.
В частности написание собственного makefile было нужно, чтобы разобраться в чужом.

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Проблемы с makefile
« Ответ #8 : 29 Июня 2011, 13:08:11 »
Про PATH понял, это такой же PATH как и в винде.
Приблизительно
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Проблемы с makefile
« Ответ #9 : 29 Июня 2011, 13:22:54 »
нет, если писать COMPILE = /usr/bin/gcc то прокатывает.
Если в начале задается PATH, а потом COMPILE=/usr/bin/gcc , то прокатывает только вызов gcc.
Сам gcc пытается запустить as, но не находит его и объектного файла не создает.

Про PATH понял, это такой же PATH как и в винде.
1. Отличие в том, что в Linuxе в пути не может быть точки (текущей директории).
Точнее, ее можно туда руками добавить, но это неправильно, у меня bash в ответ на каждую команду ругался, мол, у вас там точка в пути.
Если пути не указано, исполняемые файлы ищутся только в директориях, перечисленных в PATH. Чтобы запустить файл из текущей надо писать ./a.out

2. PATH - это только для исполняемых файлов.
Динамические библиотеки, в отличие от винды, ищутся в путях, указанных в /etc/ld.so.conf и в переменной LD_LIBRARY_PATH
Подробности  в man ld.so
« Последнее редактирование: 29 Июня 2011, 13:25:59 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн 6epreu

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Re: Проблемы с makefile
« Ответ #10 : 30 Июня 2011, 13:13:56 »
Цитировать
2. PATH - это только для исполняемых файлов.
Динамические библиотеки, в отличие от винды, ищутся в путях, указанных в /etc/ld.so.conf и в переменной LD_LIBRARY_PATH
Подробности  в man ld.so

Опять же спасибо, вот этого не знал!

 

Страница сгенерирована за 0.017 секунд. Запросов: 22.