Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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