Je veux connaître un paramètre qui est un indicateur du système d'exploitation actuel. Si je suis compatible avec Windows et Linux, comment puis-je obtenir un paramètre système qui différencie les types de systèmes d'exploitation. Ceci pour un makefile indépendant du système d'exploitation qui fonctionne sous Windows et Linux en vérifiant le paramètre dans un 'if'.Comment puis-je identifier ma plate-forme de construction correctement?
Répondre
Dans le passé, j'ai vérifié la valeur de la variable d'environnement OS. Ceci est défini sur Windows. Pour les autres plateformes, je l'ai explicitement défini dans l'environnement. Cela vous permet de pousser les paramètres spécifiques de la plate-forme dans makefiles appelé ...
makefile.Windows_NT
makefile.Linux
makefile.HPUX
Dans mon principal makefile je puis juste faire
SUPPORTED_PLATFORMS=Windows_NT AIX AIX32 Solaris8 Linux HPUX Solaris_64
ifeq (,$(findstring $(OS),$(SUPPORTED_PLATFORMS)))
all %:
@echo The OS environment variable is set to [$(OS)].
@echo Please set the OS environment variable to one of the following:
@echo $(SUPPORTED_PLATFORMS)
else
include makefile.$(OS)
all:
@$(TCLSH) makefile.tcl
@$(MAKE) -f makefile.gen
clean:
@$(TCLSH) makefile.tcl
@$(MAKE) -f makefile.gen clean
@$(RM) makefile.gen
etags:
@$(RM) TAGS
@etags *.cpp *.h TAGS
@$(MAKE) -C Core etags
@$(MAKE) -C Components etags
@$(MAKE) -C Repository etags
tags: ctags
ctags:
@ctags *.h
@$(MAKE) -C Core ctags
@$(MAKE) -C Components ctags
@$(MAKE) -C Repository ctags
lint:
@$(TCLSH) makefile.tcl
@$(MAKE) -f makefile.gen lint
depends:
@$(TCLSH) makefile.tcl
@$(MAKE) -f makefile.gen depends
endif
Tout cela fonctionne parce que je peux tirer dans les paramètres spécifiques de la plate-forme via makefile $ (OS)
C'est la somme totale de mon makefile principal et il compile pour sept plates-formes différentes. Vous pourriez rendre la détection plus intelligente mais cela réduirait la compréhensibilité.
Dans chaque makefile.WHATEVER je fournir les définitions des choses comme
#*******************************************************************************
#
# Platform specific tools
#
CC = CL
RM = rm
LINK = LINK
ETAGS = c:\emacs\bin\etags
TCLSH = tclsh83
#*******************************************************************************
#
# Platform specific CC definitions
#
INCLUDE := $(SYS_INCDIR);$(INCLUDE);$(SOURCE_ROOT_DIR)/SivTech/cpp;$(ORACLE_INCDIR);$(DB2_INCDIR);$(ODBC_INCDIR);$(MYSQL_INCDIR);$(TCL_INCDIR);$(XML_INCDIR);$(XSLT_INCDIR);$(JNI_INCLUDE);$(ACE_INCDIR);$(TAO_INCDIR);$(TAO_SERVICES_INC);$(CPPUNIT_INCDIR);$(ICU_INCDIR);$(SAP_INCDIR);$(QAS_INCDIR);$(INFA_INCDIR);$(MELISSADATA_INCDIR);$(ADDRESSDOCTOR_INCDIR)
CC_DEFS := $(CC_DEFS) -DOS_WIN_95 -D_WIN32_WINNT=0x400 -D_MBCS -DWIN32_LEAN_AND_MEAN -DWIN32 -DWIN32_EXTRA_LEAN $(CC_DEFINES)
CC_FLAGS_CMN := /c /nologo /G7 /EHsc /W3 $(CC_FLAGS$) $(CC_DEFS) $(MYFLAGS)
CC_FLAGS_DBG := $(CC_FLAGS_CMN) /Gi /MDd /Od /Zi /RTCu /RTCs /GZ
Évidemment, cela est tout à fait un point C++/C makefile, mais cela prouve que vous pouvez abstraire toutes les spécificités de la plate-forme.
Chris
Vous pouvez être intéressé à vérifier: Pre-defined C/C++ Compiler Macros. C'est une mine d'or.
- 1. Identifier les clients WCF qui ne disposent pas correctement
- 2. Pourquoi ma construction statique nécessite-t-elle des bibliothèques partagées?
- 3. Configuration de l'application multi-plateforme
- 4. Comment identifier une dépendance manquante
- 5. Ma page asp.net Master n'est pas correctement rendu dans Firefox
- 6. identifier le problème mysql
- 7. Contrôle RTF multi-plateforme?
- 8. Comment identifier la page demandée en PHP
- 9. Comment identifier les événements liés via JavaScript?
- 10. Comment décririez-vous l'état actuel de la plateforme Android?
- 11. Comment installer les outils de la plateforme Web dans Eclipse?
- 12. multi-plateforme compilation utilisant Visual Studio 2008
- 13. Comment identifier et utiliser OSType à Cocoa
- 14. Comment identifier les assemblys core .NET Framework?
- 15. Requête sur plateforme de filtrage Windows
- 16. exécutable multi-plateforme/méthode de livraison d'exécution
- 17. Gestion des chemins de fichier inter-plateforme
- 18. solutions de compilation/compilation multi-plateforme
- 19. Comment identifier les membres abstraits par réflexion
- 20. Reverse engineering: comment identifier une méthode de compression inconnue?
- 21. comment identifier machine distante uniquement en PHP?
- 22. Comment identifier si un EXE est WPF
- 23. sqlite, mono, plateforme croisée C#
- 24. Comment identifier le fichier créé complètement
- 25. Comment identifier une entité de manière unique dans Entity Framework?
- 26. Comment faire pour que ma souris dans une machine virtuelle VMWare Server fonctionne correctement?
- 27. Comment puis-je prendre des liens d'un utilisateur et les afficher correctement sur ma page?
- 28. Comment faire en sorte que mon Nib charge correctement ma sous-classe personnalisée UIScrollView?
- 29. Pourquoi mon fichier de construction Ant Master ne fonctionne-t-il pas correctement?
- 30. Comment puis-je identifier différents encodages sans utiliser de nomenclature?
Vous devriez être un peu plus précis sur l'environnement dont vous parlez. Des exemples peuvent être C/C++, Java, .NET, Python, Créer des fichiers, etc – tronda
makefile environnement pour construire des codes source C. –
Quelles sont les implémentations? – unwind