Interesujące, nie wiedziałem, że make domyślnie byłoby używać kompilatora C podanych zasad dotyczących plików źródłowych.
W każdym razie, to proste rozwiązanie, które demonstruje proste koncepcje Makefile byłoby:
HEADERS = program.h headers.h
default: program
program.o: program.c $(HEADERS)
gcc -c program.c -o program.o
program: program.o
gcc program.o -o program
clean:
-rm -f program.o
-rm -f program
(pamiętać, że dokonania wymaga kartę zamiast przestrzeni wcięcia, należy więc ustalić, że przy kopiowaniu)
Jednak w celu obsługi większej liczby plików C konieczne jest wprowadzenie nowych reguł dla każdego z nich. Dlatego, aby poprawić:
HEADERS = program.h headers.h
OBJECTS = program.o
default: program
%.o: %.c $(HEADERS)
gcc -c $< -o [email protected]
program: $(OBJECTS)
gcc $(OBJECTS) -o [email protected]
clean:
-rm -f $(OBJECTS)
-rm -f program
starałem się zrobić to tak proste, jak to możliwe, pomijając zmienne jak $ (CC) i $ (CFLAGS), które są zazwyczaj postrzegane w makefile. Jeśli chcesz się z tym pogodzić, mam nadzieję, że dałem ci dobry początek.
Oto plik Makefile, który lubię używać dla źródła C. Czuć się swobodnie z niego korzystać:
TARGET = prog
LIBS = -lm
CC = gcc
CFLAGS = -g -Wall
.PHONY: default all clean
default: $(TARGET)
all: default
OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
HEADERS = $(wildcard *.h)
%.o: %.c $(HEADERS)
$(CC) $(CFLAGS) -c $< -o [email protected]
.PRECIOUS: $(TARGET) $(OBJECTS)
$(TARGET): $(OBJECTS)
$(CC) $(OBJECTS) -Wall $(LIBS) -o [email protected]
clean:
-rm -f *.o
-rm -f $(TARGET)
Wykorzystuje funkcje wieloznacznych i patsubst na użyteczność make automatycznie obejmują .c oraz pliki .h w bieżącym katalogu, czyli po dodaniu nowych plików kodu do katalogu, nie będzie musiał aktualizować pliku Makefile. Jeśli jednak chcesz zmienić nazwę wygenerowanych plików wykonywalnych, bibliotek lub flag kompilatora, możesz po prostu zmodyfikować zmienne.
W obu przypadkach nie należy używać autoconf, proszę. Błagam Cię! :)
Aby być technicznie poprawnym, uważam, że powinieneś użyć '.PHONY: clean all default' dla tych celów, które mają być użyte z linii poleceń. Również Autoconf/Automake nie są takie złe. Jasne, czują się okropnie, a przyzwyczajenie się do nich jest równie przyjemne, jak przepychanie głowy przez ceglaną ścianę, ale one działają, i są dobrze rozwinięte, i pokryją większość twoich baz, jeśli chodzi o przenośność, i sprawi, że twoje życie będzie o wiele łatwiejsze w końcu, gdy przyzwyczaisz się do ich okropnego projektu. –
Myślę, że to działa, ale pomyślałem, że jeśli wpiszesz "make" na terminalu, program powinien działać. Oto, co otrzymuję: gcc statsh.o-Wall -lm -o prog Czy można po prostu wpisać make i wykonać program? – user69514
gdzie można dodać flagę openmp -fopenmp – MySchizoBuddy