Aller au contenu

Annexe C — Compilation et outils de build

Étapes de compilation

Source (.c) → Préprocesseur → Assembleur → Objet (.o) → Éditeur de liens → Exécutable
# Compilation complète en une commande
gcc main.c -o programme

# Étapes séparées
gcc -E main.c -o main.i    # Préprocesseur
gcc -S main.i -o main.s    # Compilateur → assembleur
gcc -c main.s -o main.o    # Assembleur → objet
gcc main.o -o programme    # Éditeur de liens

Options GCC importantes

Option Description
-o <fichier> Nom de l'exécutable
-c Compiler sans édition de liens
-I<répertoire> Ajouter un répertoire d'includes
-L<répertoire> Ajouter un répertoire de bibliothèques
-l<biblio> Lier avec une bibliothèque (ex: -lm pour math)
-O2 / -O3 Optimisations
-std=c11 Standard C à utiliser
-pedantic Respecter strictement le standard

Makefile — Automatiser la compilation

CC = gcc
CFLAGS = -Wall -Wextra -std=c11
TARGET = programme
SRCS = main.c utils.c
OBJS = $(SRCS:.c=.o)

$(TARGET): $(OBJS)
    $(CC) $(OBJS) -o $(TARGET)

%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

clean:
    rm -f $(OBJS) $(TARGET)

.PHONY: clean
make          # Compiler
make clean    # Nettoyer

CMake — Build system moderne

cmake_minimum_required(VERSION 3.10)
project(MonProjet C)

set(CMAKE_C_STANDARD 11)
add_compile_options(-Wall -Wextra)

add_executable(programme main.c utils.c)
target_link_libraries(programme m)  # Lier avec libm
mkdir build && cd build
cmake ..
make

Bibliothèques standard C

Header Fonctions clés
<stdio.h> printf, scanf, fopen, fclose
<stdlib.h> malloc, free, exit, atoi, rand
<string.h> strlen, strcpy, strcmp, memcpy
<math.h> sqrt, pow, sin, cos (lier avec -lm)
<time.h> time, clock, difftime
<assert.h> assert