-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
41 lines (33 loc) · 1.25 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Definição de variáveis
CC = gcc
CFLAGS = -Wall -Wextra
SRCDIR = src
BUILDDIR = build
DISTDIR = dist
DEBUGFLAGS = -g
LIBS = -lpcap
# Encontra todos os arquivos fonte
SOURCES := $(shell find $(SRCDIR) -type f -name '*.c')
# Filtra os arquivos específicos para BSD e Windows fora da compilação Linux
LINUX_SOURCES := $(filter-out %_bsd.c %_win.c,$(SOURCES))
# Lista de arquivos fonte específicos para BSD
BSD_SOURCES := $(wildcard $(SRCDIR)/*_bsd.c)
# Condicionalmente adiciona flags de debug se DEBUG for definido
ifdef DEBUG
CFLAGS += $(DEBUGFLAGS)
endif
# Regra para compilar cada arquivo fonte para Linux individualmente, mantendo a estrutura de diretórios
linux: $(LINUX_SOURCES)
@$(foreach src,$^, \
mkdir -p $(DISTDIR)/$(dir $(src:$(SRCDIR)/%=%)); \
$(CC) $(CFLAGS) $(src) -o $(DISTDIR)/$(src:$(SRCDIR)/%.c=%.elf) $(LIBS);)
# Regra para compilar cada arquivo fonte para BSD individualmente, mantendo a estrutura de diretórios
bsd: $(BSD_SOURCES)
@$(foreach src,$^, \
mkdir -p $(DISTDIR)/$(dir $(src:$(SRCDIR)/%=%)); \
$(CC) $(CFLAGS) $(src) -o $(DISTDIR)/$(src:$(SRCDIR)/%.c=%) $(LIBS);)
# Regra para limpar os arquivos objetos e a pasta build
clean:
@rm -rf $(BUILDDIR) $(DISTDIR)
# Não tratar estes alvos como arquivos
.PHONY: linux bsd clean