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

Bibliothèque standard C Discussion :

Makefile et préprocesseur ?


Sujet :

Bibliothèque standard C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Mayhem555
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Par défaut Makefile et préprocesseur ?
    Salut,

    J'avais une question d'ordre pratique, alors allons y gaiement :

    Je réalise une application qui a un module nommé db.c. Ce module est appelé par beaucoup d'autres modules de l'application, donc db.h est inclu dans de nombreux autres fichiers.

    Cependant, db.c est un module qui doit réaliser des échanges entre le logiciel est une base de données. Or j'ai voulu qu'il soit compatible aussi bien avec Oracle qu'avec MySQL.
    Comme vous vous en doutez, les fonctions appelées ne sont pas les mêmes, et les librairies dynamiques non plus.

    Voulant éviter à mon utilisateur d'être obligé d'avoir toutes les librairies dynamiques Oracle + MySQL, j'ai décidé de compiler deux versions distinctes de mon programme.

    C'est là que je coince, car j'aimerais automatiser cela le plus possible. Comment faire pour qu'avec uniquement une seule variable de changée dans mon makefile, je fasse passer sa valeur à une variable du préprocesseur pour que le compilateur ne compile que la partie du code dédiée à Oracle (ou MySQL, c'est selon) ?

    Vous auriez sinon une autre solution ? Variable d'environnement ?

    Merci pour vos réponses

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Sur ta ligne de compilation, tu peux par exemple ajouter un -DORACLE ou -DMYSQL et faire des #ifdef dans ton code.

  3. #3
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    Bon, c'est comme a dit nicolas.sitbon, tu peux ajouter des MACRO pour compiler le fichier db.c specefique pour le SGBD valu...

    tu peut créer deux fichier db.c, un pour Oracle et l'autre pour MySQL, et au moment de la compilation, tu verifie sur quel SGBD l'utilisateur veut que sa tourne. et le toure est joué, tu fait le lien avec le fichier db.c associé.

    Tu peut simplifier par l'utilisation d'une seule interface d'appel des fonction (db.h), contenant les définition des fonctions. et dans les fichier db.c, ces même fonctions, serons redéfinit pour qu'on puissent avoir le fonctionnement velu !!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Makefile et sed
    Par pitistef dans le forum Systèmes de compilation
    Réponses: 7
    Dernier message: 10/02/2004, 15h06
  2. [Makefile] [Avancé]Récupération de dépendances
    Par Ruok dans le forum Systèmes de compilation
    Réponses: 4
    Dernier message: 06/02/2004, 12h52
  3. [Debutant] Makefile
    Par Jfrancois57 dans le forum Systèmes de compilation
    Réponses: 8
    Dernier message: 26/01/2004, 13h18
  4. Makefile
    Par Wisefool dans le forum Systèmes de compilation
    Réponses: 2
    Dernier message: 03/11/2003, 17h41
  5. Compilation avec un Makefile
    Par Mau dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 28/02/2003, 11h30

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