makefile - make: *** Нет правила, чтобы сделать цель все '. Стоп

Некоторое время я пытался создать правильный make-файл, но все время получаю сообщение об ошибке: "make: *** Нет правил для создания цели" all ". Stop".

у меня есть одна основная программа: mpasswdsort.c и файл c, который используется mpasswdsort, он также имеет заголовок: list.c и list.h

мой make-файл:

CC=gcc
CFLAGS=-Wall -pedantic -ansi
all: mpasswdsort
server: mpasswdsort.o list.o
    $(CC) mpasswdsort.o list.o -o mpasswdsort
mpasswdsort.o: mpasswdsort.cpp
    $(CC) $(CFLAGS) mpasswdsort.cpp
list.o: list.cpp
     $(CC) $(CFLAGS) list.cpp
clean:
    rm -f server client *.o core

Я не уверен, что это неправильно в make-файле или make-файл не должен быть.txt-файлом.

4 ответа

Сообщение об ошибке, которое вы видите, указывает на то, что make не видит никаких правил для построения цели "все". Это точно такая же диагностика, что GNU make выдает, когда вообще нет make-файла. Поскольку содержимое make-файла, которое вы предоставляете , содержит правило для цели "all", я заключаю, что make не видит их.

Это может быть потому, что make-файл находится в другом каталоге, потому что его имя отличается от make пытается по умолчанию (Makefile или же makefile условно; Версия GNU make также проверяет GNUmakefile), или потому что проблема контроля доступа предотвращает make от чтения файла. Так как вы замечаете

Я не уверен, что это неправильно в make-файле или make-файл не должен быть.txt-файлом.

, наиболее вероятный вывод состоит в том, что (по крайней мере) имя файла неверно. Makefile - это текстовые файлы, но имена текстовых файлов не обязательно заканчиваются на ".txt". На самом деле, в Linux и других UNIX, большинство из них этого не делают. Makefiles не должен иметь такого расширения, хотя технически вы можете использовать -f возможность рассказать make имя make-файла для использования.

Я использую MAC, поэтому переименование «Создать файл » в «Создать файл » помогло мне.

И еще один момент, я получил эту ошибку после исправления предыдущей:

Makefile:3: *** отсутствует разделитель. Останавливаться.

Замена четырех пробелов вкладками решила эту проблему для меня! Просто удалите пробел перед командами в вашем «Makefile» и поместите за ними вкладку.

Для меня, проще говоря, я был инициаторомmake initкоманду за пределами целевого каталога, в котором я хотел создать make-файл. Надеюсь, это поможет кому-то.

У меня была папка под названием «project1_src», содержащая файлы проекта, а также make-файл внутри другой папки с тем же именем («project1_src»). Как только я получил папку, содержащую файлы, и удалил родительскую папку, make-файл заработал нормально.

Другие вопросы по тегам