Voici un exemple de Makefile simple pour un client ayant du code en commun avec un autre programme serveur.
La compilation peut être faite avec la commande
make ou si vous voulez lier directement le cross-compilateur un make CROSS_COMPILE=/home/esver/travail/proj/toolchain/arm-none-linux-gnueabi-

[c]
#——————————————————————————-
# User-modifiable options
#——————————————————————————-
# comment this line for cross compilation
COMPILE_FOR_HOST = true

CLIENT_APPLICATION = .
CLIENT_DRIVERS = ../drivers
PROJ_COMMON = ../../../Common
PROJ_COMMON_APPLICATION = $(PROJ_COMMON)/application
PROJ_COMMON_DRIVERS = $(PROJ_COMMON)/drivers

#for developpement test
PROJ_COPY_DIRECTORY = /tftpboot/rootfsC/root/

#name of the application
OUTPUT = Client

# Output directories
BIN = build/bin
OBJ = build/obj

#——————————————————————————-
# Tools
#——————————————————————————-

# Tool suffix when cross-compiling
CROSS_COMPILE ?= arm-none-linux-gnueabi-

# Compilation tools
ifdef COMPILE_FOR_HOST
CC = gcc
else
CC = $(CROSS_COMPILE)gcc
endif

# Flags
INCLUDES = -I$(PROJ_COMMON_APPLICATION)/debug
INCLUDES += -I$(PROJ_COMMON_APPLICATION)/proj_data
INCLUDES += -I$(PROJ_COMMON_APPLICATION)/msg_queue
INCLUDES += -I$(CLIENT_DRIVERS)/driver_led

#-O2 optimisation, peut aussi etre -O3
#-g3 debug, a enlever pour un binaire plus petit et pour la prod
CFLAGS = -D_XOPEN_SOURCE=600 -O2 -g3 -Wall -c -std=c99 -c

ifdef COMPILE_FOR_HOST
CFLAGS += -DCOMPILE_FOR_HOST
endif

CFLAGS += $(INCLUDES)
LDFLAGS = -lpthread

#——————————————————————————-
# Directories
#——————————————————————————-

VPATH = $(CLIENT_APPLICATION)/supervisor
VPATH += $(CLIENT_APPLICATION)/mesCom/mes_Tx
VPATH += $(CLIENT_APPLICATION)/mesCom/mes_Rx
VPATH += $(CLIENT_APPLICATION)/led_Flash
VPATH += $(CLIENT_APPLICATION)/utility
VPATH += $(CLIENT_DRIVERS)/driver_led
VPATH += $(PROJ_COMMON_APPLICATION)/msg_queue
VPATH += $(PROJ_COMMON_APPLICATION)/debug/

#——————————————————————————-
# Files
#——————————————————————————-

PROJ_O = main.o msg_Inst.o
PROJ_O += thread_Mes_Tx.o
PROJ_O += thread_Mes_Rx.o
PROJ_O += thread_led_flash.o
PROJ_O += utility.o

PROJ_O += driver_led.o

PROJ_O += msg_queue.o
PROJ_O += debug.o

#——————————————————————————-
# Rules
#——————————————————————————-

all: $(BIN) $(OBJ) $(OUTPUT) copy

#create binary directory
$(BIN) $(OBJ):
@echo ‘Create $@ directory’
@mkdir -p $@

#create the charger binary
$(OUTPUT): $(PROJ_O)
@echo ‘Generate the binary $@’
@$(CC) $(LDFLAGS) -o $(BIN)/$@ $(OBJ)/*.o

#create the charger objects
%.o: %.c
@echo ‘Compiling objects $@’
@$(CC) $(CFLAGS) -o $(OBJ)/$@ $^

#copy the binary in a directory (tftpboot for example)
copy:
ifndef COMPILE_FOR_HOST
@echo ‘Copying the files in $(OPERA_COPY_DIRECTORY)’
@cp $(BIN)/$(OUTPUT) $(OPERA_COPY_DIRECTORY)
endif

clean:
@echo ‘Remove $(PROJ_O) $(BIN)/$(OUTPUT)’
@-rm -f $(OBJ)/*.o $(BIN)/$(OUTPUT)
[/c]