dire si il s'est exécuté sur windows ou linux
Est-il un moyen de savoir dans les fichiers makefile si GNU make est en cours d'exécution sur un système d'exploitation linux ou windows OS?
J'ai construit un script bash qui génère un makefile pour la construction de mon application et il fonctionne très bien sur ma machine Debian. Je veux essayer de construire sur MinGW/MSYS, mais le problème est que je dois construire et exécuter des programmes de test que l'enregistrement des erreurs dans le code source, et de le faire fonctionner sur Windows, il faut ajouter .exe suffixe.
Il est Temps d'utiliser Maven. Il est indépendant de la plateforme.
Pour contourner ce problème, vous pouvez simplement inclure la .exe suffixe tous plates-formes Linux ne m'en voudrez pas si c'est là, aussi longtemps que vous vous souvenez de l'inclure lors de l'exécution du programme.
C'est un double de la stackoverflow.com/questions/714100/os-detecting-makefile
En désaccord que c'est un doublon. J'ai cherché pour cette question spécifique sur .exe sur différents Systèmes d'exploitation, mais Google a montré tout d'abord la question que vous l'avez mentionné, qui n'avait pas de réponse directe, seulement une collection de différentes techniques pour identifier un OS, pas précisément comment vous pouvez ajouter un ".exe" extension de fichier uniquement pour les plates-formes qui l'utilisent. Les autres techniques peuvent permettre une plus large gamme de plus générique des solutions à des problèmes similaires, mais ce n'est pas le même comme un double de répondre ou même de demander à cette question spécifique.
Pour contourner ce problème, vous pouvez simplement inclure la .exe suffixe tous plates-formes Linux ne m'en voudrez pas si c'est là, aussi longtemps que vous vous souvenez de l'inclure lors de l'exécution du programme.
C'est un double de la stackoverflow.com/questions/714100/os-detecting-makefile
En désaccord que c'est un doublon. J'ai cherché pour cette question spécifique sur .exe sur différents Systèmes d'exploitation, mais Google a montré tout d'abord la question que vous l'avez mentionné, qui n'avait pas de réponse directe, seulement une collection de différentes techniques pour identifier un OS, pas précisément comment vous pouvez ajouter un ".exe" extension de fichier uniquement pour les plates-formes qui l'utilisent. Les autres techniques peuvent permettre une plus large gamme de plus générique des solutions à des problèmes similaires, mais ce n'est pas le même comme un double de répondre ou même de demander à cette question spécifique.
OriginalL'auteur Gianni Pisetta | 2011-10-24
Vous devez vous connecter pour publier un commentaire.
uname commande devrait vous donner les informations de base sur le système d'exploitation. Pouvez-vous l'utiliser, et ensuite faire une sur la base de la valeur de retour?
De ne pas réécrire tout ce qui, ici - ces deux questions peuvent être de quelque intérêt pour vous
1. OS détection makefile
2. Fichier Makefile distincts entre Windows et les systèmes de type Unix
OriginalL'auteur Rook
make
(etgcc
) peut être facilement installé sur MS-Windows à l'aide de Cygwin ou MinGW.@Ldigas dit,
make
peut détecter la plate-forme à l'aide deUNAME:=$(shell uname)
(la commandeuname
est également installé par Cygwin ou le programme d'installation de MinGW).Ci-dessous, je donne un exemple complet basé sur
make
(etgcc
) pour expliquer comment construire une bibliothèque partagée:*.so
ou*.dll
selon la plate-forme.L'exemple de base/simple pour être facilement compréhensible 🙂
Voyons les cinq fichiers:
La
Makefiles
app/Makefile
lib/Makefile
Le code source
app/main.c
lib/hello.h
lib/hello.c
La construction
Fixer
Makefiles
copie (remplacer les espaces par tabulation).La
make
commande est la même sur les deux plateformes. C'est la sortie sur MS-Windows (enlevé les lignes inutiles).La course
L'application nécessite de savoir où est la bibliothèque partagée.
Sur MS-Windows, le plus simple/base/stupide est de copier la bibliothèque où l'application est:
Sur Linux, utilisez le
LD_LIBRARY_PATH
variable d'environnement:La ligne de commande exécuter et de sortie sont les mêmes sur les deux plates-formes:
OriginalL'auteur olibre