et ca ne correspond pas à l'enoncé premier de detecter si tu es sous windows natif ou sous linux natif
en effet l'appel system lors de l'execution devrait permettre de detecter l'OS
mais ce n'est alors pas à la compilation que tu detectes l'OS sur lequel tu compiles, mais bien à l'execution
du programe
Mon problème n'est pas la compilation, je compile toujours sous Linux, même pour produire un exécutable win32 ou win64. Là il n'y a pas de détection d'OS, juste un switch dans le makefile.
avec un simple ls ou un dir
ca devrait deja te dire si la commande existe ou pas,
et si elle n'existe pas, c'est que tu n'es pas sur l'OS visé (ls = linux, dir = windows)
Non, justement c'est le même cas que celui de mon 1er résultat : sous Linux, un programme win64 exécuté avec Wine me répondra que la commande ls n'existe pas et que la commande dir existe, donc ça ne me permet pas de savoir que l'OS sous-jacent est Linux. En plus il faut analyser la réponse pour détecter l'erreur, c'est plus compliqué que juste récupérer un booléen me disant si le fichier /bin/. existe ou pas. Le bout de code Fortran pour faire cela pourrait être quelque chose comme ça :
detection_Wine: block
logical :: bExist
inquire(file='/bin/.',exist=bExist)
if (bExist) slash='/'
end block detection_Wine
avec slash une variable définie précédemment en fonction de la variable OS définie à la compilation pour l'OS cible et insérée dans le code grâce à un include.
[^] # Re: Résultats de mes tests
Posté par Jean-Baptiste Faure . En réponse au message détecter l'OS depuis un code compilé. Évalué à 1.
Mon problème n'est pas la compilation, je compile toujours sous Linux, même pour produire un exécutable win32 ou win64. Là il n'y a pas de détection d'OS, juste un switch dans le makefile.
Non, justement c'est le même cas que celui de mon 1er résultat : sous Linux, un programme win64 exécuté avec Wine me répondra que la commande ls n'existe pas et que la commande dir existe, donc ça ne me permet pas de savoir que l'OS sous-jacent est Linux. En plus il faut analyser la réponse pour détecter l'erreur, c'est plus compliqué que juste récupérer un booléen me disant si le fichier /bin/. existe ou pas. Le bout de code Fortran pour faire cela pourrait être quelque chose comme ça :
detection_Wine: block
logical :: bExist
inquire(file='/bin/.',exist=bExist)
if (bExist) slash='/'
end block detection_Wine
avec slash une variable définie précédemment en fonction de la variable OS définie à la compilation pour l'OS cible et insérée dans le code grâce à un include.