2010-11-15 10 views
13

Używam Ubuntu 10.04. Ilekroć uruchamiam make clean, otrzymuję:"make clean" oznacza "Brak reguły, aby cel" czysty ""

make: *** Brak reguły, aby cel był "czysty". Zatrzymać.

Oto mój makefile:

CC = gcc 
CFLAGS = -g -pedantic -O0 -std=gnu99 -m32 -Wall 
PROGRAMS = digitreversal 
all : $(PROGRAMS) 
digitreversal : digitreversal.o 
     $(CC) $(CFLAGS) -o [email protected] $^ $(LDFLAGS) 
.PHONY: clean 
clean: 
     @rm -f $(PROGRAMS) *.o core 

pomysłów, dlaczego jej nie działa?

EDIT: Wydaje się robi:

make -f Makefile.txt clean 

prace. Teraz: czy jest jakieś ustawienie do zmiany, więc nie muszę za każdym razem wykonywać -f Makefile.txt?

+3

Upewnij się, że używasz właściwego 'makefile'. Może się tak zdarzyć, że powyższe jest nazwane 'Makefile' i masz również' makefile', który nie ma 'clean' target i kiedy wywołasz' make clean', make domyślnie używa 'makefile', a nie' Makefile'. – codaddict

+4

wystarczy zmienić nazwę pliku 'Makefile.txt' na' Makefile' bez rozszerzenia w nazwie. –

+0

Miałem ten sam problem na moim macu. Z jakiegoś powodu 'MakeFile' nie został znaleziony przez polecenie make. zmiana nazwy na 'makefile' rozwiązała problem. to jest absurdalne! – Foad

Odpowiedz

16

Wygląda na to, że twój plik Makefile nie nazywa się "Makefile" lub "makefile". Jeśli jest inaczej, powiedz "abc", spróbuj uruchomić 'make -f abc clean'

1

Użytkownik padł ofiarą najczęstszych błędów w plikach Makefile. Zawsze musisz umieścić kartę na początku każdego polecenia. Miejsca zostały wstawione przed wierszami $(CC) $(CFLAGS) -o [email protected] $^ $(LDFLAGS) i @rm -f $(PROGRAMS) *.o core. Jeśli zastąpisz je Tabulatorem, wszystko będzie dobrze.

Jednak ten błąd nie prowadzi do błędu "Brak reguły, by cel ...". Prawdopodobnie oznacza to, że problem leży poza plikiem Makefile. Czy sprawdziłeś, czy jest to poprawny Makefile, jak w tym, który chcesz określać swoje polecenia? Spróbuj jawnie przekazać go jako parametr do wykonania, i daj nam znać, co się stanie.

+6

Jeśli brakuje kart, nie otrzymasz błędu "Brak reguły, aby cel", zamiast tego otrzymasz błąd "brakującego separatora". – codaddict

+0

Masz rację i, jak wyjaśniłem, nie byłoby problemu z Makefile, per se. –

0

To działa dla mnie. Czy na pewno wciskasz tabulatory?

CC = gcc 
CFLAGS = -g -pedantic -O0 -std=gnu99 -m32 -Wall 
PROGRAMS = digitreversal 
all : $(PROGRAMS) 
digitreversal : digitreversal.o 
    [tab]$(CC) $(CFLAGS) -o [email protected] $^ $(LDFLAGS) 

.PHONY: clean 
clean: 
    [tab]@rm -f $(PROGRAMS) *.o core 
1

Sprawdź, czy plik nazywa się GNUMakefile, makefile lub Makefile.

Jeśli to się nazywa coś innego (i nie chcesz, aby zmienić jego nazwę), a następnie spróbuj:

make -f othermakefilename czysty

7

Przypuszczam, że zorientowali go teraz. Odpowiedź jest ukryta w twojej pierwszej wiadomości.

Komenda make domyślnie wyszukuje makefile, Makefile i GNUMakefile jako pliku wejściowego i masz Makefile.txt w folderze. Po prostu usuń rozszerzenie pliku (.txt) i powinno działać.

Powiązane problemy