Bonsoir,
tout simplement: comment bien gérer les différents OS dans son code source lors de la compilation ?
merci d'avance
Bonsoir,
tout simplement: comment bien gérer les différents OS dans son code source lors de la compilation ?
merci d'avance
bonjour dafpp
Avec la compilation conditionnelle !!!
Page sur Developpez : http://pbriand.developpez.com
D'accord ça je sais, mais quel sont les constantes, et comment je gère le 32 bits du 64 bits ?
Bonjour dafpp
si cela concerne windows, ce lien est une piste
Page sur Developpez : http://pbriand.developpez.com
Tu commence par ecrire autant que possible du code qui ne depends pas de l'OS.
Pour ce qui depends de l'OS tu ecris une couche d'abstraction dont seule l'implementation va dependre de l'OS (et le choix du fichier est fait par le systeme de build). C'est uniquement dans cette couche d'abstraction que de la compilation conditionnelle sur l'OS devrait etre possible (tu ne vas pas ecrire une implementation pour chaque variante d'Unix ou de Windows, mais ecrire deux implementations bien separees, une pour les Unix, l'autre pour les Windows; s'il y a des choses dupliquees, tu peux remettre en cause ta couche d'abtraction)
Oui je vois, c'est pour ça que c'est important de respecter un maximum les normes, mais des fois on peut pas: exemple, pour créer un dossier, mkdir sur linux prend 3 arguments, et windows 2.
Donc n'y a t-il pas des constantes pour savoir l'os directement qu'on utilise et faire la compilation conditionnel ?
Car moi j'utilise bêtement un define pour dire que j'utilise linux, et si je suis sur windows je retire, mais y a t-il pas plus simple ?
Sous visual avec les define automatiquement sur les configuration de projet c'est pas mal
Mais il existe des predefined macro, comme listée ici http://sourceforge.net/apps/mediawik...rating_Systems
Après, le compilateur a peut-être une influence ?
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
Si je comprends bien, tu peux virer commplètement ton define.
si ton code actuel ressemble à ça :
tu peux virer le #define du code et le définir dans le compilo (makefile, gcc) avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 #define LINUX .... #ifdef LINUX //code linux #endif
-D LINUX (je ne sais plus s'il faut un espace ou pas.
non je ne parle pas en shell, il y a la commande mkdir dans je ne sais pas laquel lib, mais sur windows, cette fonction a 2 arguments (il n'y a pas les droits), et sur linux il y a 3 arguments.
Je vais noté tout ça, merci à tous.
@mala92 : En utilisant le lien de Bousk, tu n'as même pas besoin de le spécifier au compilateur : chaque OS va définir des macros. C'est ce qu'utilise Benjamin Roux dans mon lien.
Essayez le code suivant :
Validé avec XP/CodeBlocks et GCC/RedHat où ça affiche le bon mot ; avec GCC/Solaris où ça n'affiche rien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <stdio.h> int main(void) { #ifdef _WIN32 printf("Trouve _WIN32"); #endif #ifdef linux printf("Trouve linux"); #endif return 0; }
@dafpp : oki pour mkdir![]()
Partager