Вопрос или проблема
Я следовал инструкциям по установке GCC [1], чтобы скачать исходный код и настроить свою сборку, но когда я пытаюсь выполнить make
из корневого каталога (с MAINTAINERS
и Makefile.in
), я всегда получаю одну и ту же ошибку: make: *** No targets specified and no makefile found.
Я не знаю, как продолжить с шагом сборки в руководстве по установке.
Редактировать: Я заметил, что мой файл objdir/config.log
заканчивается на configure: exit 1
, и я не уверен, ожидается ли это или это указывает на то, что конфигурация не удалась и проект не находится в жизнеспособном состоянии для сборки.
Я пробовал
-
make
-
make install
-
make bootstrap
-
make -f Makefile.in
Это завершилось ошибкой с сообщением
Makefile:26: *** missing separator. Stop.
из-за строк, начинающихся с@if
и@endif
. Этот автогенерируемый файл имеет много таких строк, я сомневаюсь, что я должен удалять их вручную.
Мой полный рабочий процесс до этого момента:
# Получите исходный код
~$ mkdir gcc; cd gcc
~/gcc$ git clone git://gcc.gnu.org/git/gcc.git .
# Создайте objdir/ и настройте необходимую сборку
~$ mkdir ARM; cd ARM
~/gcc/ARM$ ../configure --prefix=$HOME --target=aarch64-none-elf
# Попробуйте "просто сделать"
~/gcc/ARM$ cd ..
~/gcc$ make # :(
Некоторые, возможно, релевантные детали
~/gcc$ gcc --version
gcc (GCC) 11.4.1 20231218 (Red Hat 11.4.1-3)
Copyright (C) 2021 Free Software Foundation, Inc.
Это свободное программное обеспечение; смотрите исходный код для условий копирования. Нет
гарантии; даже не для ТОРГОВЫХ КАЧЕСТВ или ПОДХОДЯЩЕСТВА ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ.
~/gcc$ make --version
GNU Make 4.3
Собрано для x86_64-redhat-linux-gnu
Copyright (C) 1988-2020 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версия 3 или более поздняя <http://gnu.org/licenses/gpl.html>
Это свободное программное обеспечение: вы можете изменять и перераспределять его.
Нет ГАРАНТИИ, в пределах, разрешенных законом.
~/gcc$ git show
commit 3e89a4d5138e585713604135d4c2601244055e82 (HEAD -> master, origin/trunk, origin/master, origin/HEAD)
Автор: Джейсон Меррилл <[email protected]>
Дата: Суб, 16 ноя 2024 15:25:04 -0500
...
~/gcc$ ls
ABOUT-NLS config.sub fixincludes libcody libitm ltmain.sh missing
ar-lib configure gcc libcpp libobjc lt~obsolete.m4 mkdep
ARM configure.ac gnattools libdecnumber libphobos lto-plugin mkinstalldirs
ChangeLog contrib gotools libffi libquadmath ltoptions.m4 move-if-change
ChangeLog.jit COPYING include libgcc libsanitizer ltsugar.m4 multilib.am
ChangeLog.tree-ssa COPYING3 INSTALL libgfortran libssp ltversion.m4 README
compile COPYING3.LIB install-sh libgm2 libstdc++-v3 MAINTAINERS SECURITY.txt
config COPYING.LIB libada libgo libtool-ldflags maintainer-scripts symlink-tree
config.guess COPYING.RUNTIME libatomic libgomp libtool.m4 Makefile.def test-driver
config-ml.in c++tools libbacktrace libgrust libvtv Makefile.in ylwrap
config.rpath depcomp libcc1 libiberty ltgcc.m4 Makefile.tpl zlib
EDIT: исправил некоторые детали и добавил некоторые детали
Проблема заключается в config.log – файле журнала, создаваемом при запуске configure
. Явным признаком является последняя строка, указывающая на ошибку при выполнении скрипта – ненулевое значение выхода – ‘configure: exit 1’ в моем случае. Прокручивая вверх, видно, что configure
не смог найти некоторые зависимости gcc (mpc, mpfr, gmp). Мне просто нужно сначала установить их, затем, когда конфигурация завершится успешно, я, вероятно, найду готовый Makefile в srcdir.
Ответ или решение
Чтобы решить проблему компиляции GCC, возникающую с сообщением об ошибке "make: *** No targets specified and no makefile found.", необходимо выполнить несколько шагов для диагностики и устранения причин. Ваша ошибка, вероятно, связана с неудачной конфигурацией сборки, которая, в свою очередь, вызвана отсутствием необходимых зависимостей.
1. Анализ ошибки
Ошибка "No targets specified and no makefile found" указывает на то, что в текущем каталоге отсутствует файл Makefile, который необходим для выполнения команды make
. Это может происходить по нескольким причинам:
- Команда configure завершилась неудачно: Это означает, что в процессе конфигурации отсутствуют необходимые библиотеки или инструменты, и, следовательно, Makefile не был создан.
- Вы находитесь не в правильном каталоге: Убедитесь, что вы запускаете make в каталоге, где был сгенерирован Makefile, обычно это каталог, где вы выполнили
configure
.
2. Проверка файла config.log
Обязательно проверьте файл config.log
, который находится в директории сборки (обычно это objdir/config.log
). Как вы уже заметили, строчка configure: exit 1
показывает на ошибку. Вам нужно найти более подробную информацию, которая предшествует этому сообщению, чтобы понять, в чем именно заключалась проблема.
В вашем случае вы упомянули, что конфигурация не смогла найти некоторые зависимости, такие как mpc, mpfr и gmp. Это распространенные библиотеки, необходимые для сборки GCC.
3. Установка необходимых зависимостей
Чтобы успешно выполнить конфигурацию, установите недостающие библиотеки и инструменты. В зависимости от вашей системы (например, Debian/Ubuntu или Red Hat/CentOS) команды могут различаться:
Для Debian/Ubuntu:
sudo apt-get update
sudo apt-get install build-essential libgmp-dev libmpfr-dev libmpc-dev
Для Red Hat/CentOS:
sudo yum groupinstall "Development Tools"
sudo yum install gmp-devel mpfr-devel libmpc-devel
4. Перезапуск конфигурации
После установки всех необходимых зависимостей, перейдите в папку objdir
(в вашем случае это, похоже, папка ARM) и попробуйте снова выполнить конфигурацию:
cd ~/gcc/ARM
../configure --prefix=$HOME --target=aarch64-none-elf
5. Выполнение команды make
Если конфигурация прошла успешно (без ошибок в config.log
), вы должны увидеть Makefile в каталоге. Теперь вы можете выполнить:
make
6. Дополнительные шаги
Если после выполнения make
вы сталкиваетесь с другими ошибками, убедитесь, что все необходимые инструменты компиляции и зависимости установлены. Проконсультируйтесь с документацией на официальном сайте GCC или их сообществом для получения дополнительной информации и поддержки.
Следуя этим шагам, вы сможете устранить проблемы с компиляцией GCC и продолжить процесс установки.