我想知道一个参数,它是当前操作系统的指标。如果支持 Windows 和 Linux,我如何获得区分操作系统类型的系统参数。这是一个独立于操作系统的 makefile,它通过检查“if”中的参数在 Windows 和 Linux 中运行。
最佳答案
过去我检查过环境变量 OS 的值。这是在 Windows 上设置的。对于其他平台,我已经在环境中明确设置了它。然后,您可以将特定于平台的设置推送到名为 ... 的 makefile 中。
makefile.Windows_NT
makefile.Linux
makefile.HPUX
然后在我的主 makefile 中做
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.$(OS) 引入特定于平台的设置
这是我的主要 makefile 的总和,它针对七个不同的平台进行编译。您可以使检测更聪明,但这会降低可理解性。
在每个 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++ 的 makefile,但它证明您可以抽象出所有平台细节。
克里斯
关于c - 如何正确识别我的构建平台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/916186/