IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Systèmes de compilation Discussion :

Makefile générique pour compilation projet C


Sujet :

Systèmes de compilation

  1. #1
    Membre éclairé Avatar de AuraHxC
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 652
    Points : 683
    Points
    683
    Par défaut Makefile générique pour compilation projet C
    Bonsoir tout le monde.

    Alors j'ai fait un makefile qui me permet de compiler un projet C qui possède toujours la même structure : bin, headers, src qui sont des dossiers où l'on y trouve respectivement : executable, les .h, les .c

    Je voudrais aussi faire un dossier obj qui contient les .o mais je n'y arrive pas.

    Voici le makefile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    CC=gcc
    CFLAGS=-Wall -std=c99 -Wextra -O -Wwrite-strings -Wstrict-prototypes -Wuninitialized -Wunreachable-code -Wno-missing-braces  -Wno-missing-field-initializers -Iheaders
    LDFLAGS=-Wall -lm
    EXEC=bin/Bataille
    VPATH=src
    vpath %.h headers
    SRC=$(wildcard src/*.c)
    OBJ=$(notdir $(SRC:.c=.o))
     
    Bataille: $(OBJ)
    	@ $(CC) -o $(EXEC) $(OBJ) $(LDFLAGS)
    	@echo creation de lien
     
    %.o: %.c
    	@ $(CC) -c $< $(CFLAGS)
    	@echo creation de $@
     
    .PHONY: clean mrproper
    	@echo suppression de tous les fichiers.
     
    mrproper: clean
    	@ rm -f $(EXEC)
    	@echo suppression executable
     
    clean:
    	@ rm -f *.o
    	@echo suppression des fichiers objets
    Je suis ouvert a toute proposition et critique => si vous pensez le rendre plus simple, compact etc...

    Merci d'avance.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Tu n'es pas le premier à poser la question. A chaque fois, je renvoie vers ma solution mais on pourrait faire mieux. Voici un peu de lecture.
    http://www.developpez.net/forums/sho...d.php?t=433401

    En fait, je pense que l'idéal pour cela serait d'utiliser le vpath mais j'ai un souci avec. Je suis obligé de compiler en deux temps (make ; make) car la première fois les fichiers objets n'existent pas. Mais peut-être que le vpath n'est fait que pour les sources et non les fichiers produits.

Discussions similaires

  1. Modélisation : Un "main" générique pour mon projet
    Par Opsse dans le forum Général Java
    Réponses: 2
    Dernier message: 06/05/2015, 15h38
  2. Idées pour compiler en distribué un projet C++ Builder ?
    Par swirtel dans le forum C++Builder
    Réponses: 0
    Dernier message: 03/02/2008, 11h14
  3. Création d'un makefile pour compilation automatique
    Par freestyler dans le forum Delphi
    Réponses: 48
    Dernier message: 08/06/2007, 15h47
  4. Réponses: 4
    Dernier message: 07/05/2007, 09h02
  5. Réponses: 3
    Dernier message: 07/03/2006, 23h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo