62 votes

Makefile distinct entre Windows et les systèmes de type Unix

Je voudrais avoir le même Makefile pour la construction sur Linux et sur Windows. J'ai utiliser la valeur par défaut de GNU make sur Linux et le mingw32-make (également GNU make) sur Windows.

Je veux le Makefile afin de détecter s'il fonctionne sur Windows ou Linux.


Par exemple make clean commande sur Windows ressemble à:

clean:
    del $(DESTDIR_TARGET)

Mais sur Linux:

clean:
    rm $(DESTDIR_TARGET)

Aussi, je tiens à utiliser différents séparateur de répertoire sur Windows (\) et Linux (/).


Il est possible de détecter le système d'exploitation Windows dans le Makefile?

PS: je ne veux pas imiter Linux sur Windows (cygwin, etc.)

Il est similaire à la question: OS détection makefile, mais je n'ai pas trouver la réponse ici.

69voto

Paul Hutchinson Points 402

J'ai résolu ce problème en recherchant une env variable qui ne sera définie que sur windows.

ifdef SystemRoot
   RM = del /Q
   FixPath = $(subst /,\,$1)
else
   ifeq ($(shell uname), Linux)
      RM = rm -f
      FixPath = $1
   endif
endif

clean:
    $(RM) $(call FixPath,objs/*)

Parce que la %SystemRoot% est le chemin vers le répertoire windows est devrait être fixé sur tous les ordinateurs Windows mais pas sous Linux.

Ensuite, les blocs de configurations variables pour les différents programmes ainsi qu'une fonction pour convertir les barres obliques dans les barres obliques inverses.

Vous devez utiliser $(appel FixPath,chemin d'accès) lorsque vous appelez un en dehors de commande (commandes internes fonctionnent bien). Vous pouvez également utiliser quelque chose comme:

/ := /

et puis

objs$(/)*

si vous aimez ce format de mieux.

51voto

tomsgd Points 336

L'astuce SystemRoot ne fonctionnait pas pour moi sous Windows XP, mais dans les faits:

 ifeq ($(OS),Windows_NT)
    #Windows stuff
    ...
else
    #Linux stuff
    ....
endif
 

10voto

Antoine Pelisse Points 5067

Vous devriez probablement utiliser la variable $ (RM) pour supprimer certains fichiers.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X