2009-05-27 4 views
3

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?

+2

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

+0

makefile environnement pour construire des codes source C. –

+0

Quelles sont les implémentations? – unwind

Répondre

3

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

Questions connexes