Örnek
Şöyle. Bu örnekte .o dosyaları kaynak kod ile aynı yerde oluşuyor.
Şöyle. Bu örnekte .o dosyaları kaynak kod ile aynı yerde değil.
Şöyledir. Kaynak kodlar elle belirtiliyor. Bu örnekte .PHONY tanımlamak aslında gerekli değil, çünkü aynı diznde clean, fclean, re gibi dosyaların olması zaten mümkün değil.
Genelde şöyle bir şeydir.
.c dosyası varsa .o dosyasını üretmek için çalıştırılacak kuralı belirtir.
.y dosyası varsa .c dosyası üretmek için çalıştırılacak kuralı belirtir.
$@ işareti
Current target anlamına gelir. makefile çalışırken o anki işletin target ismidir. Şöyle yaparız.
Şöyle. Bu örnekte .o dosyaları kaynak kod ile aynı yerde oluşuyor.
ÖrnekCPP = g++
CPPFLAGS = ...
sources = $(wildcard ../*.cpp)
objects = $(sources : ../%.cpp = %.o)
%.o : ../%.cpp
$(CPP) -c $(CPPFLAGS) $<
all : $(objects)
ar -rcv libmylib.a $(objects)
Şöyle. Bu örnekte .o dosyaları kaynak kod ile aynı yerde değil.
BUILDDIR:=build
sources:=$(wildcard *.c)
objects:=$(addprefix $(BUILDDIR)/, $(patsubst %.c, %.o, $(sources)))
$(BUILDDIR)/%.o: %.c
gcc -c $^ -o $@
all: $(objects)
ÖrnekŞöyledir. Kaynak kodlar elle belirtiliyor. Bu örnekte .PHONY tanımlamak aslında gerekli değil, çünkü aynı diznde clean, fclean, re gibi dosyaların olması zaten mümkün değil.
NAME = main
CC = gcc -g
RM = rm -f
SRCS = functions.c \
main.c
OBJS = $(SRCS:.c=.o)
CFLAGS = -I ./include/
CFLAGS += -W -Wall -Wextra
all: $(NAME)
$(NAME): $(OBJS)
@$(CC) $(OBJS) -o $(NAME) $(LDFLAGS)
@printf "\n[$(GREEN)OK$(WHITE)] Binary : $(NAME)\n"
@echo "-------------------\n"
%.o : %.c
@$(CC) $(CFLAGS) -c -o $@ $<
@printf "[$(GREEN)OK$(WHITE)] $<\n"
clean:
$(RM) $(OBJS)
fclean: clean
$(RM) $(NAME)
re: fclean all
.PHONY: all clean fclean re
Pattern KuralıGenelde şöyle bir şeydir.
.c dosyası varsa .o dosyasını üretmek için çalıştırılacak kuralı belirtir.
%.o: %.c
.cpp dosyası varsa .o dosyasını üretmek için çalıştırılacak kuralı belirtir.# To get *any* .o file, compile its .cpp file with the following rule.
%.o: %.cpp
$(CXX) $(FLAGS) $(CXXFLAGS) -c $<
Bazen şöyle de yazılabiliyor..y dosyası varsa .c dosyası üretmek için çalıştırılacak kuralı belirtir.
.y.c:
${BISON} -d -o $@ $<
$@ işareti
Current target anlamına gelir. makefile çalışırken o anki işletin target ismidir. Şöyle yaparız.
CC=g++
CFLAGS=-c -Wall -g -std=c++11
LDFLAGS=
SOURCES=lab5.cpp Card.cpp Deck.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=lab5
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
clean:
rm -f *.o $(EXECUTABLE)
Hiç yorum yok:
Yorum Gönder