Rumah > pembangunan bahagian belakang > C++ > Makefile - .h - .c contoh.

Makefile - .h - .c contoh.

王林
Lepaskan: 2024-07-17 07:42:59
asal
519 orang telah melayarinya

Makefile - .h - .c exemple.

Berikut ialah struktur projek dengan contoh tanpa perpustakaan statik dahulu, diikuti dengan contoh dengan perpustakaan statik.

Struktur Projek

/mon_projet
├── Makefile
├── utils.h
├── utils.c
└── main.c
Salin selepas log masuk

Contoh 1: Tanpa perpustakaan statik

1. Fail pengepala: utils.h

#ifndef UTILS_H
#define UTILS_H

// Fonction pour additionner deux entiers
int addition(int a, int b);

#endif // UTILS_H
Salin selepas log masuk
Salin selepas log masuk

2. Fail sumber: utils.c

#include "utils.h"

// Implémentation de la fonction d'addition
int addition(int a, int b) {
    return a + b;
}
Salin selepas log masuk
Salin selepas log masuk

3. Fail utama: main.c

#include <stdio.h>
#include "utils.h"

int main() {
    int a = 5;
    int b = 3;
    int result = addition(a, b);

    printf("La somme de %d et %d est : %d\n", a, b, result);
    return 0;
}
Salin selepas log masuk
Salin selepas log masuk

4. Makefile: Makefile

# Variables
CC = gcc
CFLAGS = -Wall -g
SOURCES = main.c utils.c
OBJECTS = $(SOURCES:.c=.o)
DEPENDS = $(OBJECTS:.o=.d)
TARGET = mon_programme

# Règle par défaut
all: $(TARGET)

# Lien de l'exécutable
$(TARGET): $(OBJECTS)
    $(CC) -o $@ $^

# Compilation des fichiers .c en .o avec génération des dépendances
%.o: %.c
    $(CC) $(CFLAGS) -MMD -c $< -o $@

# Inclure les fichiers de dépendance
-include $(DEPENDS)

# Déclaration des cibles phony
.PHONY: all clean fclean re

# Nettoyage
clean:
    rm -f $(OBJECTS) $(DEPENDS)

fclean: clean
    rm -f $(TARGET)

re: fclean all
Salin selepas log masuk

Contoh 2: Dengan perpustakaan statik

1. Fail pengepala: utils.h

#ifndef UTILS_H
#define UTILS_H

// Fonction pour additionner deux entiers
int addition(int a, int b);

#endif // UTILS_H
Salin selepas log masuk
Salin selepas log masuk

2. Fail sumber: utils.c

#include "utils.h"

// Implémentation de la fonction d'addition
int addition(int a, int b) {
    return a + b;
}
Salin selepas log masuk
Salin selepas log masuk

3. Fail utama: main.c

#include <stdio.h>
#include "utils.h"

int main() {
    int a = 5;
    int b = 3;
    int result = addition(a, b);

    printf("La somme de %d et %d est : %d\n", a, b, result);
    return 0;
}
Salin selepas log masuk
Salin selepas log masuk

4. Makefile: Makefile

# Variables
CC = gcc
AR = ar
CFLAGS = -Wall -g
SOURCES = main.c utils.c
OBJECTS = $(SOURCES:.c=.o)
DEPENDS = $(OBJECTS:.o=.d)
TARGET = mon_programme
LIBRARY = libutils.a

# Règle par défaut
all: $(TARGET)

# Lien de l'exécutable
$(TARGET): $(OBJECTS) $(LIBRARY)
    $(CC) -o $@ $^

# Création de la bibliothèque statique
$(LIBRARY): utils.o
    $(AR) rcs $@ $^

# Compilation des fichiers .c en .o avec génération des dépendances
%.o: %.c
    $(CC) $(CFLAGS) -MMD -c $< -o $@

# Inclure les fichiers de dépendance
-include $(DEPENDS)

# Déclaration des cibles phony
.PHONY: all clean fclean re

# Nettoyage
clean:
    rm -f $(OBJECTS) $(DEPENDS) $(LIBRARY)

fclean: clean
    rm -f $(TARGET)

re: fclean all
Salin selepas log masuk

Ringkasan Contoh

  1. Tanpa perpustakaan statik:

    • Kompilasi fail sumber secara langsung untuk mencipta my_program boleh laku tanpa membuat perpustakaan.
  2. Dengan perpustakaan statik:

    • Mencipta libutils.a library daripada utils.o.
    • Program_my boleh laku bergantung pada perpustakaan ini.

guna

  • Untuk menyusun atur cara: buat
  • Untuk membersihkan fail objek dan pustaka (dalam contoh pertama): buat bersih
  • Untuk membersihkan sepenuhnya: buat fclean
  • Untuk membina semula: buat semula

Contoh ini menunjukkan cara menstruktur projek ringkas dengan dan tanpa perpustakaan statik sambil mengekalkan kejelasan dan kebolehselenggaraan dalam Makefile.

Contoh 3: Menggunakan perpustakaan lain:

Nota: ini ialah Makefile yang saya buat semasa menjalankan salah satu projek saya.

# Arguments
NAME        = libftprintf.a
CFLAGS      = -Wall -Wextra -Werror -I .

# Sources
SRC_FILES    = ft_printf.c \
               ft_ulitob.c \
               ft_putunbr_fd.c \
               ft_unsigned_lintlen.c \
               ft_lintlen.c \
               ft_print_c.c \
               ft_print_s.c \
               ft_print_p.c \
               ft_print_di.c \
               ft_print_u.c \
               ft_print_x.c

# Objets
OBJ_FILES    = $(SRC_FILES:.c=.o)

# Règle principale
all: $(NAME)

# Création de la bibliothèque
$(NAME): $(OBJ_FILES)
    make -C libft/
    cp libft/libft.a $(NAME)
    ar rcs $(NAME) $(OBJ_FILES)

# Compilation des fichiers source
%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

# Nettoyage
clean:
    rm -rf $(OBJ_FILES)
    make clean -C libft/

fclean: clean
    rm -rf $(NAME)
    make fclean -C libft/

re: fclean all

# Commandes indispensables
.PHONY: all clean fclean re
Salin selepas log masuk

Penambahbaikan Utama

  1. Penjanaan Automatik Fail Objek: Pembolehubah OBJ_FILES secara automatik menukar nama fail sumber kepada nama fail objek menggunakan penggantian corak.

  2. Peraturan Corak: Menggunakan peraturan corak (%.o:%c) memudahkan arahan kompilasi untuk setiap fail sumber.

  3. Peraturan Pembersihan Tersusun: Peraturan pembersihan adalah ringkas, menghilangkan pengulangan yang tidak perlu.

  4. Kemudahan Penyelenggaraan: Strukturnya jelas, menjadikan pengubahsuaian masa hadapan lebih mudah.

Fail Make ini mengekalkan fungsi yang sama sambil menjadi lebih bersih dan lebih cekap.

Atas ialah kandungan terperinci Makefile - .h - .c contoh.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan