#1 Le 10/09/2007, à 16:55
- otheym
[Résolu] [Makefile] conditions windows et linux
Bonjour à tous,
Je suis entrain de faire un programme à partir de linux.
J'aimerais que celui-ci soit compilable aussi biens sous Linux que Windows(les utilisateurs sont plutôt sous windows).
Je sais comment rendre compilable sous Windows ET Linux mon programme.
Mais j'aimerais que le makefile ne dépendent pas de linux, c'est à dire que j'aimerais spécifier des informations par rapport à la platforme.
Je sais qu'en C et C++ ont à les directives pré-processeur comme #ifdef, #ifndef, mais y-a-t-il la même chose avec les makefile ?
J'ai entendu parlé des ifeq qui ferait comme les #ifdef, mais comment déterminer la platforme ?
Je sais que je pourrais faire cela avec une variable que je définit dans le makefile, mais cela oblige l'utilisateur à modifier le makefile.
Mon but étant donc de retrouver dans le makefile des instructions dans le même genre que en C, par exemple :
#ifdef _WIN32
instructions
#elif _UNIX
instructions
#endif
Mais pour les makefile bien sur.
Merci d'avance à ceux qui pourront m'aider.
Dernière modification par otheym (Le 12/09/2007, à 07:40)
Aelita, je te promet que l'ont pourra bientôt vivre tous les deux.
Je te le jure mon amour.
Hors ligne
#2 Le 10/09/2007, à 18:47
- JBF
Re : [Résolu] [Makefile] conditions windows et linux
tu ne pourrais pas tester la valeur d'une variable d'environnement typique de MS-Windows. Si tu ne la trouves pas tu fais le pari que c'est un Unix et tu testes le résultat de uname si tu as besoin de détails.
JBF
LibreOffice : https://fr.libreoffice.org/ (téléchargement, documentation, FAQ, assistance, contribuer, ...)
Aide pour LibreOffice par la communauté francophone : Ask LibreOffice
Hors ligne
#3 Le 10/09/2007, à 19:29
- otheym
Re : [Résolu] [Makefile] conditions windows et linux
Salut,
Je ne comprend pas bien ce que tu veux me dire.
pourquoi tester le result de uname ?
Comment tester une var de Windows ?
Aelita, je te promet que l'ont pourra bientôt vivre tous les deux.
Je te le jure mon amour.
Hors ligne
#4 Le 10/09/2007, à 19:46
- ®om
Re : [Résolu] [Makefile] conditions windows et linux
Pour java j'utilise ANT plutôt que MAKE, les tâches sont décrites en XML et ne dépendent pas du système d'exploitation. Je ne sais pas si ça marche pr d'autres langages...
Hors ligne
#5 Le 10/09/2007, à 19:56
- otheym
Re : [Résolu] [Makefile] conditions windows et linux
salut ®om,
Je programme en C.
En fait je cherche à faire la même chose que les #ifdef en C, j'ai cherché sur le site de GNU et ils en parle de #ifdef, mais j'ai testé et ca fonctionne pas, apparement dans les makefile, les #ifdef sont pareil que les #ifeq c'est a dire que l'ont teste une variable interne au makefile.
Aelita, je te promet que l'ont pourra bientôt vivre tous les deux.
Je te le jure mon amour.
Hors ligne
#6 Le 10/09/2007, à 21:19
- telliam
Re : [Résolu] [Makefile] conditions windows et linux
essaye un truc dy genre
CC = gcc -Wall
SRC = $(wildcard *.c)
EXE = example
OS = `uname -a`
all: clean
echo 'Compilation pour $(OS)...'
ifeq ($(OS), Win32)
$(CC).exe $(SRC) -o $(EXE)
else
$(CC) $(SRC) linux.specific.c -o $(EXE)
endif
clean:
ifneq ($(OS), Win32)
del *.o
else
rm *.o
endif
"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard
Hors ligne
#7 Le 10/09/2007, à 21:21
- otheym
Re : [Résolu] [Makefile] conditions windows et linux
Tu oubli une chose, le uname sous windows n'est pas connu, je ne peux donc pas utiliser un uname -a.
Aelita, je te promet que l'ont pourra bientôt vivre tous les deux.
Je te le jure mon amour.
Hors ligne
#8 Le 11/09/2007, à 01:02
- Le Farfadet Spatial
Re : [Résolu] [Makefile] conditions windows et linux
Salut à tous !
Il est possible d'utiliser Ant pour compiler du code C/C++, quoique ce soit un peu tordu.
Par contre, pour résoudre ton problème, je connais deux solutions classiques :
1. utiliser les auto-tools (entre autre ce qui produit le « .configure » de « .configure ; Make »), qui sont capables de faire ça avec pas mal d'efforts et en s'arrachant les cheveux sur le manuel d'utilisation ;
2. utiliser CMake, c'est fait pour.
Bien évidemment, je te conseille la deuxième solution. Par contre, tu peux abandonner l'espoir de faire ça en n'utilisant que Make.
À bientôt.
Le Farfadet Spatial
Hors ligne
#9 Le 11/09/2007, à 09:17
- otheym
Re : [Résolu] [Makefile] conditions windows et linux
Bonjour,
Pour les auto-tools, j'ai jamais compris comment ont s'en sert et j'ai jamais trouvé de tuto français expliquant comme s'en servir.
Ceux-ci en outre oblige de faire un ./configure avec de faire un make, donc impossible sous Windows, sinon les utilisateurs sont obligé d'installer soit Msys soit Cygwin, dans le cas de Cygwin, cela veut dire que le programme dépend de Cygwin.
Pour CMake, le soucis étant que CMake est inéxistant sous windows.
Je rappel que je programme sous Linux MAIS le programme sera majoritairement utilisé sous Windows, il faut donc que les utilisateurs windows puissent en cas de besoin, le recompiler assez facilement.
Aelita, je te promet que l'ont pourra bientôt vivre tous les deux.
Je te le jure mon amour.
Hors ligne
#10 Le 11/09/2007, à 14:42
- littleblackdog
Re : [Résolu] [Makefile] conditions windows et linux
heu si, CMake existe bel et bien sous Windows.
http://www.cmake.org/HTML/Install.html <-- premier paragraphe pour l'aperçu.
après, le souci est que tes utilisateurs devront posséder CMake pour compiler ton programme. 'faut voir avec leur niveau ...
si ce sont des débutants, pourquoi ne pas leur proposer des sources précompilées, adaptées à chaque plateforme ?
Hors ligne
#11 Le 11/09/2007, à 14:58
- otheym
Re : [Résolu] [Makefile] conditions windows et linux
C'est ce que j'ai l'intention de faire, toutefois, seule les version stable seront précompilé, les versions béta seront uniquement les codes sources, pour ceux voulant donc utiliser la toute dernière version même si c'est une béta, devra obligatoirement recompilé.
C'est pour cela que je veux que se soit le plus simple possible pour l'utilisateur.
Aelita, je te promet que l'ont pourra bientôt vivre tous les deux.
Je te le jure mon amour.
Hors ligne
#12 Le 12/09/2007, à 01:12
- Le Farfadet Spatial
Re : [Résolu] [Makefile] conditions windows et linux
Salut à tous !
Je confirme, CMake existe sous Windows. CMake est fait pour gérer des projets multi-plateformes, ce qui inclut évidemment Windows.
Bien sûr, les auto-tools c'est super compliqué et oui, il faut un environnement de type Cygwin pour les faire tourner sous Windows.
En effet, il faut que la personne qui veut compiler un code qui utilise CMake ait CMake. Cela dit, c'est un moindre mal. Parce qu'il faut bien que tu te rendes compte (et je suis désolé de faire le constat) que :
IL EST IMPOSSIBLE DE FAIRE CE QUE TU VEUX FAIRE AVEC UN SIMPLE MAKEFILE.
Désolé, c'est comme ça. Pas le choix.
Maintenant, il est aisé de se procurer CMake et ce n'est pas très difficile à utiliser. Je persiste et je signe : c'est, à l'heure actuelle, la meilleure solution à ton problème.
À bientôt.
Le Farfadet Spatial
Hors ligne
#13 Le 12/09/2007, à 07:39
- otheym
Re : [Résolu] [Makefile] conditions windows et linux
Salut,
J'ai finalement résolu le soucis, je passe dans mon makefile par une variable du makefile, dans le README j'inclus comment indiquer au makefile de compiler pour Linux(par défaut) ou pour Windows.
Aelita, je te promet que l'ont pourra bientôt vivre tous les deux.
Je te le jure mon amour.
Hors ligne
#14 Le 12/09/2007, à 07:59
- Watchwolf
Re : [Résolu] [Makefile] conditions windows et linux
sinon tu crée un projet dev-cpp ou autre.
Hors ligne
#15 Le 12/09/2007, à 20:03
- Le Farfadet Spatial
Re : [Résolu] [Makefile] conditions windows et linux
Salut à tous !
Bon, au moins, cette solution est pour toi simple à gérer tant que tu n'utilise pas trop de bibliothèque.
Toutefois, si tu continues à faire du développement multi-plateformes (ce qui est une bonne habitude), je te conseille tout de même à jeter un œil aux outils existants, ils sont là pour te simplifier la vie --- j'ai souvenance de softs avec des Makefiles au nombre de variables incroyable, j'en fais encore des cauchemars la nuit (en plus c'est moi qui était responsable de la démultiplication des variables) !
Bon courage avec ton code !
À bientôt.
Le Farfadet Spatial
Dernière modification par Le Farfadet Spatial (Le 12/09/2007, à 20:05)
Hors ligne
#16 Le 22/11/2008, à 01:00
- IIfabII
Re : [Résolu] [Makefile] conditions windows et linux
J'ai fait une petite lib qui permet de faire simplement des makefiles multi-plateforme et qui permettent de compiler sous linux, macosx, windows (aussi bien sous cygwin que directement sous dos, avec gcc ou avec le compilateur de visual) : http://savannah.nongnu.org/projects/makecfiles
L'idée pour savoir si tu es sous windows, macosx ou linux est de faire les testes dans l'ordres :
d'abord "echo %OS%" qui renvera Windows_NT ou %OS% sur les autres plateformes puis après tester uname qui existe sur tous les unix. C'est comme ça que fait cette petite lib pour makefile.
#17 Le 22/11/2008, à 01:04
- IIfabII
Re : [Résolu] [Makefile] conditions windows et linux
petite précision, il faut installer GNU make.
Sous windows vous pouvez installer tout GnuWin32 ou uniquement l'outil make.
http://gnuwin32.sourceforge.net/
http://gnuwin32.sourceforge.net/packages/make.htm