2009-05-27 3 views
3

현재 OS의 표시기 인 매개 변수를 알고 싶습니다. Windows 및 Linux를 지원하는 경우 OS 유형을 차별화하는 시스템 매개 변수를 얻는 방법은 무엇입니까? 'if'에서 매개 변수를 검사하여 Windows 및 Linux에서 모두 실행되는 OS 독립적 makefile의 경우.빌드 플랫폼을 올바르게 식별하려면 어떻게해야합니까?

+2

당신이 말하는 환경에 대해 좀 더 구체적이어야합니다. 예제는 C/C++, Java, .NET, Python, Make files 등이 될 수 있습니다. – tronda

+0

makefile 환경에서 C 소스 코드를 빌드 할 수 있습니다. –

+0

어느 것이 구현됩니까? – unwind

답변

3

이전에는 환경 변수 OS의 값을 확인했습니다. 이것은 Windows에서 설정됩니다. 다른 플랫폼에서는 명시 적으로 환경에 설정했습니다. 이는 내가 메이크를 통해 플랫폼 관련 설정에서 뽑을 수 있기 때문에 그때 단지

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 

이 모든 일을 내 주요 메이크에서

makefile.Windows_NT 
makefile.Linux 
makefile.HPUX 

... 당신이 전화 메이크로 플랫폼 특정 설정을 밀어 수 있습니다 . $ (OS)

그건 내 주요 메이크 파일의 합계이고 7 개의 다른 플랫폼에서 컴파일됩니다. 탐지를 더 명확하게 할 수는 있지만 이해력을 떨어 뜨릴 수 있습니다.

각 makefile.WHATEVER에서 나는

#******************************************************************************* 
# 
# 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 

같은 것들을의 정의를 제공 분명히이 꽤 C/C++ 초점 메이크이지만이 증명 멀리 모든 플랫폼 특성의 추상적 인 할 수있다.

크리스