makefile etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
makefile etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

28 Eylül 2017 Perşembe

Minimal makefile

Örnek
Şöyle. Bu örnekte .o dosyaları kaynak kod ile aynı yerde oluşuyor.
CPP = g++
CPPFLAGS = ...
sources = $(wildcard ../*.cpp)
objects = $(sources : ../%.cpp = %.o)

%.o : ../%.cpp
  $(CPP) -c $(CPPFLAGS) $<

all : $(objects)
 ar -rcv libmylib.a $(objects)

Örnek
Şö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)





24 Aralık 2015 Perşembe

makefile ve değişken

Varsayılan (Default) Değişkenler
Make bazı değişkenleri kendisi tanımlar. Çok kullanılan bazı değişkenler şu işe yarar.

CPPFLAGS : C Preprocessor'ına geçilecek parametreleri belirtir.
CFLAGS : C derleyicisine geçilecek parametreleri belirtir.
CXXFLAGS : C++ derleyicisine geçilecek parametreleri belirtir.
LDFLAGS : Linker'a geçilecek parametreleri belirtir.
LDLIBS : Linklenecek kütüphaneler belirtir.

Ayrıca
CC sistemdeki C derleyicisini belirtir.
MAKE sistemdeki make uygulamasını belirtir.

CXX
Şöyle kullanırız.
$> CXX='g++ -m32' make
CC
Şöyle kullanırız.
make CC='gcc -m32' CXX='g++ -m32'

Değişkenin Değerine Erişme
Değişkenin değerine $(var_name) şeklinde erişilir.

Ortam Değişkeni
Ortam değişkeninin değerine de yine $ işareti ile erişilir. TEST isimli bir ortam değişkenini If testine sokmak için şöyle yaparız. ifreq'ten önce tab olmamalıdır.
test_target: 
ifeq ($(TEST),"TRUE")
        echo "Do something"
endif
make'e ortam değişkeni şöyle geçilebilir.
$ make TEST=TRUE
make: Nothing to be done for 'test_target'.
Değişkene Değeri Kabuk Programı Çağırarak Atama
Bazen değişkene değeri kabuk programı çağırarak değer atamak gerekir. Shell metodu ile yaparız.
now=$(shell date)