현재 OS의 표시기 인 매개 변수를 알고 싶습니다. Windows 및 Linux를 지원하는 경우 OS 유형을 차별화하는 시스템 매개 변수를 얻는 방법은 무엇입니까? 'if'에서 매개 변수를 검사하여 Windows 및 Linux에서 모두 실행되는 OS 독립적 makefile의 경우.빌드 플랫폼을 올바르게 식별하려면 어떻게해야합니까?
3
A
답변
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++ 초점 메이크이지만이 증명 멀리 모든 플랫폼 특성의 추상적 인 할 수있다.
크리스
0
당신은 체크 아웃에 관심이있을 수 : Pre-defined C/C++ Compiler Macros를. 그것은 금광입니다.
당신이 말하는 환경에 대해 좀 더 구체적이어야합니다. 예제는 C/C++, Java, .NET, Python, Make files 등이 될 수 있습니다. – tronda
makefile 환경에서 C 소스 코드를 빌드 할 수 있습니다. –
어느 것이 구현됩니까? – unwind