📄 makefile.def
字号:
#
# Setup for the linker
#
!if "$(TARGETTYPE)"=="DYNLINK"
LINKER_FLAGS=$(LINKER_FLAGS) -mac:nobundle -dll -def:$(DLLDEF)
LINKER_FLAGS=$(LINKER_FLAGS) -mac:MFILEPAD
LINKER_FLAGS=$(LINKER_FLAGS) -mac:init="$(MAC_INITPROC)"
LINKER_FLAGS=$(LINKER_FLAGS) -mac:term="$(MAC_TERMPROC)"
!else
LINKER_FLAGS=-mac:bundle
!endif
LINKER_FLAGS=$(LINKER_FLAGS) -mac:type="$(MAC_TYPE)"
LINKER_FLAGS=$(LINKER_FLAGS) -mac:creator="$(MAC_CREATOR)"
LINKER_FLAGS=$(LINKER_FLAGS) -debug:FULL
LINKER_FLAGS=$(LINKER_FLAGS) -debugtype:both
LINKER_FLAGS=$(LINKER_FLAGS) -NODEFAULTLIB
#*****End Mac linker flags
!ELSE
LINKER_FLAGS = $(LINKER_FLAGS) $(LINKER_DBG_SECTION) $(LINKER_DBG_TYPE) $(LINK_OS_VERSIONS)
!ENDIF
!ifdef USE_OLDSTYLE_IMPLIB
LIBRARIAN_FLAGS = $(LIBRARIAN_FLAGS) /link50compat
!else
LIBRARIAN_FLAGS = $(LIBRARIAN_FLAGS) /newimplib
!endif
LIBRARIAN_FLAGS = $(LINK_LIB_IGNORE_FLAG) $(LIBRARIAN_FLAGS) -nodefaultlib
LIBRARIAN_FLAGS = -debugtype:cv $(LIBRARIAN_FLAGS) -machine:$(MACHINE_TYPE)
!ifndef LIB_NAME
LIB_NAME=lib
!endif
LIBRARIAN=$(LIB_NAME) -out:$@ $(LIBRARIAN_FLAGS)
!ifndef LINK_NAME
LINK_NAME=link
!endif
LINKER=$(LINK_NAME) -out:$@ -machine:$(MACHINE_TYPE)
!if defined(NTPROFILEINPUT) && ("$(TARGETTYPE)" == "LIBRARY")
! message NTPROFILEINPUT s/b removed in: $(MAKEDIR).
!endif
!IF defined(NTPROFILEINPUT) || defined(EXEPROFILEINPUT)
ORDER=-order:@$(@B).prf
!ENDIF
!IFDEF DLLORDER
ORDER=-order:@$(DLLORDER)
!ENDIF
!IFNDEF DRIVER_ALIGNMENT
DRIVER_ALIGNMENT=0x20
!ENDIF
!ifndef HAL_ALIGNMENT
HAL_ALIGNMENT=0x20
!endif
!ifndef KERNEL_ALIGNMENT
KERNEL_ALIGNMENT=0x40
!endif
#
# LINT section
#
# Main env. vars:
# USE_LINT=1 to turn on PC-lint processing
# LINT_TYPE={all,lob,<nothing>}
# all - processes all $(SOURCES) files at once
# lob - processes $(SOURCES) individually and then consolidates
# <nothing> - processes $(SOURCES) individually (like John Daly's tool)
#
# Other env. vars:
# LINT_PATH=path to PC-lint directory (default=$(BASEDIR)\lint)
# LINT_APP=name of PC-lint executable (default=lint-nt)
# LINT_OUTPUT=base name of lint output file (default=$(TARGETNAME))
# LINT_EXT=extension of output files (default=tmp)
# LINT_FORCEDINCS=list of forced include files. same as in -FI compiler switch
# LINT_OPTS=options passed to PC-lint (default=+v -zero)
# LINT_PRECOMPPATH=paths that were used for precompiled header.
# - some components generate a pch in
# a separate step and use the pch amongst several
# subdirs. This env. var. lets one specify the
# include paths used for the pch.
#
!ifdef USE_LINT
# Convert CDEFINES which may contain /DSYMBOL1, -DSYMBOL2 to
# -dSYMBOL1 and -dSYMBOL2 which PC-Lint wants
LINT_DEFS=$(CDEFINES:-D=-d)
LINT_DEFINES=$(LINT_DEFS:/D=-d)
! ifndef LINT_PATH
LINT_PATH=$(BASEDIR)\lint
! endif
! ifndef LINT_APP
LINT_APP=$(LINT_PATH)\lint-nt
! endif
!ifndef LINT_OPTS
LINT_OPTS=+v -zero
!endif
! if "$(LINT_TYPE)" == "all"
! ifndef LINT_ALL_CMD
LINT_ALL_CMD=$(LINT_APP) $(LINT_OPTS) $(LINT_INCLUDES) $(LINT_DEFINES) $(LINT_FORCEDINCS) -i$(LINT_PATH)\ std.lnt -os($O\$(LINT_OUTPUT).$(LINT_EXT))
! endif
! else
! if "$(LINT_TYPE)" == "lob"
! ifndef LINT_CMD
LINT_CMD=$(LINT_APP) -u $(LINT_OPTS) $(LINT_INCLUDES) $(LINT_DEFINES) $(LINT_FORCEDINCS) -i$(LINT_PATH)\ std.lnt +os($O\$(LINT_OUTPUT).$(LINT_EXT)) -oo($@)
! endif
! ifndef LINT_CMD2
LINT_CMD2=$(LINT_APP) $(LINT_OPTS) -i$(LINT_PATH)\ std.lnt +os($O\$(LINT_OUTPUT).$(LINT_EXT)) $(O)\*.lob
! endif
! else
! ifndef LINT_CMD
LINT_CMD=$(LINT_APP) $(LINT_OPTS) $(LINT_INCLUDES) $(LINT_DEFINES) $(LINT_FORCEDINCS) -i$(LINT_PATH)\ std.lnt +os($O\$(LINT_OUTPUT).$(LINT_EXT))
! endif
! endif
! endif
!else
LINT_CMD2=
!endif
!ifndef LINT_CMD2
LINT_CMD2=
!endif
#
# Standard inference rules for C files that produce object files.
#
.SUFFIXES: .cxx .cpp .c .f .rc .s .asm .obj .exe .res .p .tdl .odl .rcpp .thk .java .class
#
# Processor specific control and options.
#
!include $(TARGET_DIRECTORY)mk.inc
!ifdef NMPNCD_BUILD
!INCLUDE NMPNCD.inc
!endif
!if defined(USE_MAPSYM) && !defined(NO_MAPSYM)
MAPSYM_CMD = mapsym -o $(@D)\$(@B).sym $(@D)\$(@B).map
LINKER_FLAGS=$(LINKER_FLAGS) -map
BINPLACE_FLAGS = $(BINPLACE_FLAGS) -W
!else
MAPSYM_CMD =
!endif
!if "$(USE_PDB)" == ""
LINKER_FLAGS = $(LINKER_FLAGS) -PDB:NONE
!elseif ("$(PDB_ROOT)" != "")
LINKER_FLAGS = $(LINKER_FLAGS) -PDB:$(PDB_ROOT)\$(TARGETEXT)^\
PDB_ROOTUM = -PDB:$(PDB_ROOT)\$(UMAPPLEXT:.=)^\
!endif
LIBRARY_OBJS=$(IMPLIB_OBJS) $(MFC_STATIC_LIB) $(LINKLIBS) $(OBJECTS)
!if "$(TARGETTYPE)" != "DRIVER" && \
"$(TARGETTYPE)" != "EXPORT_DRIVER" && \
"$(TARGETTYPE)" != "MINIPORT" && \
"$(TARGETTYPE)" != "GDI_DRIVER"
LINKER_FLAGS = $(LINKER_FLAGS) -merge:.rdata=.text
!endif
!if $(DELAYLOAD_SUPPORTED)
! if "$(DELAYLOAD)" != ""
#! if "$(DLOAD_ERROR_HANDLER)" != ""
DELAYLOAD = $(DELAYLOAD: =)
DELAYLOAD_FLAGS = /delayload:$(DELAYLOAD:;= /delayload:)
LINKER_FLAGS = $(LINKER_FLAGS) $(DELAYLOAD_FLAGS)
CRTLIBS=$(CRTLIBS) $(SDK_LIB_PATH)\delayload.lib
C_DEFINES=$(C_DEFINES) /DDELAYLOAD_VERSION=$(DELAYLOAD_VERSION)
#! else
#! if "$(NOLINK)" == ""
#! message BUILDMSG: DLOAD_ERROR_HANDLER not specified - Ignoring DELAYLOAD
#! endif
#! endif
! endif
!endif
#
# Clear the suffixes list so we can ensure only pass zero stuff will be built
#
!IFDEF PASS0ONLY
.SUFFIXES:
!ENDIF
#
# DDK does not allow signing of binaries
#
!ifdef NO_BINPLACE
BINPLACE_CMD=
!else
! ifndef BINPLACE_PLACEFILE
! if "$(BUILD_PRODUCT)" == "IE"
BINPLACE_PLACEFILE = $(BASEDIR)\public\sdk\lib\ieplace.txt
! else
BINPLACE_PLACEFILE = $(BASEDIR)\public\sdk\lib\placefil.txt
! endif
! endif
BINPLACE_FLAGS = -P $(BINPLACE_PLACEFILE) $(BINPLACE_FLAGS)
! if "$(BUILD_PRODUCT)" == "NT" && !defined(COFF_OUTPUT_ONLY)
BINPLACE_FLAGS = -j $(BINPLACE_FLAGS)
! endif
DRIVER_SWITCH = -driver
!if "$(DRIVERTYPE)" == "wdm" || "$(DRIVERTYPE)" == "WDM"
DRIVER_SWITCH = $(DRIVER_SWITCH) -driver:wdm
!endif
! IF "$(_NTTREE)" != ""
! IFDEF ALT_PROJECT_TARGET
_NTTREE= $(_NTTREE)\$(ALT_PROJECT_TARGET)
! if "$(_NTTREE_NO_SPLIT)" != ""
_NTTREE_NO_SPLIT= $(_NTTREE_NO_SPLIT)\$(ALT_PROJECT_TARGET)
! endif
! ENDIF
# If NTDBGFILES is defined then use binplace to split the symbols.
# Define BINPLACE flags as needed if separate .DBG file requested.
! IFDEF NTDBGFILES
BINPLACE_DBGFLAGS_NT = -S $(_NTTREE)\Symbols
! else
BINPLACE_DBGFLAGS_NT=
! ENDIF
!if "$(VERIFY_LC)" == "1"
! ifndef LC_PATH
LC_PATH=.
! endif
BINPLACE_LC_FLAGS = -G $(LC_PATH)\$(@F).lc
BINPLACE_LC_MISCFLAGS = -G $(LC_PATH)\$(**F).lc
!else
BINPLACE_LC_FLAGS=
BINPLACE_LC_MISCFLAGS=
!endif
BINPLACE_CMD_NT=binplace -R $(_NTTREE) $(BINPLACE_DBGFLAGS_NT) $(BINPLACE_FLAGS) $(BINPLACE_LC_FLAGS) $@
BINPLACE_CMD_NS=binplace -R $(_NTTREE_NO_SPLIT) -Q $(BINPLACE_FLAGS) $@
BINPLACE_CMD = $(BINPLACE_CMD_NT)
! if "$(_NTTREE_NO_SPLIT)" != ""
BINPLACE_CMD = $(BINPLACE_CMD) & $(BINPLACE_CMD_NS)
! endif
! ELSE
BINPLACE_CMD=
! ENDIF
!endif
BINPLACE_CMD=@$(BINPLACE_CMD)
!ifdef NTDUMPAMAP
MAPDUMP_CMD = link -dump -map $@ | sort /R /+62 > $(_NTDUMPAMAP)\$(@B).srt
!else
MAPDUMP_CMD =
!endif
#
# Define this macro so including make files can supply a yes prompt
# as appropriate. Put the "yes." file in a visible place for OEM's
# so they can make too.
#
!IFNDEF NOPASS0
#
# Pass Zero Inference Rules: IDL files (MIDL) and MC files
#
.SUFFIXES: .h .idl .mc .odl .tdl .asn .thk .mof
! IF $(386)
PASS0_OBJECTS=$(PASS0_386_OBJECTS)
! ELSEIF $(AXP64)
PASS0_OBJECTS=$(PASS0_AXP64_OBJECTS)
! ELSEIF $(ALPHA)
PASS0_OBJECTS=$(PASS0_ALPHA_OBJECTS)
! ELSEIF $(MPPC)
PASS0_OBJECTS=$(PASS0_MPPC_OBJECTS)
! ELSEIF $(IA64)
PASS0_OBJECTS=$(PASS0_IA64_OBJECTS)
! ENDIF
!ENDIF # IFNDEF NOPASS0
MIDL = midl
MKTYPLIB = mktyplib
ASN = asn1
!IFDEF USE_OLE_MC
MC = mc -o
!ELSE
MC = mc
!ENDIF
MOFCOMP = mofcomp
!IF "$(IDL_TYPE)" == "ole" || "$(IDL_TYPE)" == ""
IDL_TYPE=OLE
!ELSEIF "$(IDL_TYPE)" == "rpc"
IDL_TYPE=RPC
!ENDIF
!IFNDEF PASS0_HEADERDIR
PASS0_HEADERDIR=.
!ENDIF
!IF "$(WIN32_WINNT_VERSION)" != "0x0500"
MIDL_OPTIMIZATION=$(MIDL_OPTIMIZATION_NT4)
!ENDIF
!IF DEFINED(MIDL_NO_ROBUST)
MIDL_OPTIMIZATION=$(MIDL_OPTIMIZATION_NO_ROBUST)
!ENDIF
! ifdef MIDL_TLBDIR
MIDL_TLBSWITCH=/tlb $(MIDL_TLBDIR)\$(<F:.idl=.tlb)
! else
MIDL_TLBSWITCH=
! endif
!IF "$(IDL_TYPE)" == "OLE"
! IF DEFINED(PASS0_CLIENTDIR) || DEFINED(PASS0_SERVERDIR)
! ERROR PASS0_CLIENTDIR and PASS0_SERVERDIR can only be used with IDL_TYPE=RPC!
! ENDIF
! IFNDEF PASS0_SOURCEDIR
PASS0_SOURCEDIR=.
! ENDIF
! IFNDEF MIDL_UUIDDIR
MIDL_UUIDDIR=$(PASS0_SOURCEDIR)
! ENDIF
!if $(MPPC)
PACKING= -Zp2
!else
PACKING= -Zp8
!endif
! IFNDEF NO_PASS0_RULES
.idl{$(PASS0_HEADERDIR)}.h:
$(MIDL) \
$(PACKING) \
$(INCPATH0) \
-char unsigned \
-ms_ext -c_ext \
-proxy $(PASS0_SOURCEDIR)\$(<F:.idl=_p.c) \
-dlldata $(PASS0_SOURCEDIR)\dlldata.c \
-iid $(MIDL_UUIDDIR)\$(<F:.idl=_i.c) \
$(MIDL_TLBSWITCH) \
-header $@ \
-cpp_cmd $(TARGET_CPP) \
$(C_DEFINES) \
$(MIDL_FLAGS) \
$(MIDL_OPTIMIZATION) \
$<
{..\}.idl{$(PASS0_HEADERDIR)}.h:
$(MIDL) \
$(PACKING) \
$(INCPATH0) \
-char unsigned \
-ms_ext -c_ext \
-proxy $(PASS0_SOURCEDIR)\$(<F:.idl=_p.c) \
-dlldata $(PASS0_SOURCEDIR)\dlldata.c \
-iid $(MIDL_UUIDDIR)\$(<F:.idl=_i.c) \
$(MIDL_TLBSWITCH) \
-header $@ \
-cpp_cmd $(TARGET_CPP) \
$(C_DEFINES) \
$(MIDL_FLAGS) \
$(MIDL_OPTIMIZATION) \
$<
! ENDIF
!ELSEIF "$(IDL_TYPE)" == "RPC"
! IF DEFINED(PASS0_SOURCEDIR) || DEFINED(MIDL_UUIDDR)
! ERROR PASS0_SOURCEDIR and MIDL_UUIDDIR can only be used with IDL_TYPE=OLE!
! ENDIF
! IFNDEF PASS0_CLIENTDIR
PASS0_CLIENTDIR=$(TARGETPATH)
! ENDIF
! IFNDEF PASS0_SERVERDIR
PASS0_SERVERDIR=$(PASS0_CLIENTDIR)
! ENDIF
! IFNDEF NO_PASS0_RULES
.idl{$(PASS0_HEADERDIR)}.h:
$(MIDL) \
$(PACKING) \
$(INCPATH0) \
-char unsigned \
-ms_ext -c_ext \
-cstub $(PASS0_CLIENTDIR)\$(<F:.idl=_c.c) \
-sstub $(PASS0_SERVERDIR)\$(<F:.idl=_s.c) \
$(MIDL_TLBSWITCH) \
-header $@ \
-cpp_cmd $(TARGET_CPP) \
$(C_DEFINES) \
$(MIDL_FLAGS) \
$(MIDL_OPTIMIZATION) \
$<
{..\}.idl{$(PASS0_HEADERDIR)}.h:
$(MIDL) \
$(PACKING) \
$(INCPATH0) \
-char unsigned \
-ms_ext -c_ext \
-cstub $(PASS0_CLIENTDIR)\$(<F:.idl=_c.c) \
-sstub $(PASS0_SERVERDIR)\$(<F:.idl=_s.c) \
$(MIDL_TLBSWITCH) \
-header $@ \
-cpp_cmd $(TARGET_CPP) \
$(C_DEFINES) \
$(MIDL_FLAGS) \
$(MIDL_OPTIMIZATION) \
$<
! ENDIF
!ELSE
! ERROR Invalid IDL_TYPE value. Supported values: OLE and RPC.
!ENDIF # IDL_TYPE
CPPXX = $(C_PREPROCESSOR_FLAGS:/Tc=)
CPPXX = $(CPPXX:-Tc=)
!IFNDEF NO_PASS0_RULES
! IFDEF PASS0_SOURCEDIR
MC_SOURCEDIR=$(PASS0_SOURCEDIR)
! ELSE
MC_SOURCEDIR=$(PASS0_CLIENTDIR)
! ENDIF
{..\}.mc{$(PASS0_HEADERDIR)}.h:
$(MC) -h $(PASS0_HEADERDIR) -r $(MC_SOURCEDIR) $(MC_FLAGS) $<
{..\}.mc{$(MC_SOURCEDIR)}.rc:
$(MC) -h $(PASS0_HEADERDIR) -r $(MC_SOURCEDIR) $(MC_FLAGS) $<
.mc{$(PASS0_HEADERDIR)}.h:
$(MC) -h $(PASS0_HEADERDIR) -r $(MC_SOURCEDIR) $(MC_FLAGS) $<
.mc{$(MC_SOURCEDIR)}.rc:
$(MC) -h $(PASS0_HEADERDIR) -r $(MC_SOURCEDIR) $(MC_FLAGS) $<
# ManagedObjectFormat files
{..\}.mof.bmf:
$(MOFCOMP) -B:$@ $<
.mof.bmf:
$(MOFCOMP) -B:$@ $<
MKTYPLIB_CPP = $(TARGET_CPP)
!ifdef USE_MIDL_FOR_MKTYPLIB
MIDL_MKTYPLIB_FLAGS = \
$(PACKING) \
$(INCPATH0) \
-char unsigned \
-ms_ext \
-c_ext \
$(C_DEFINES) -D__MKTYPLIB__ \
$(MIDL_FLAGS) \
$(MIDL_OPTIMIZATION) \
$(MKTYPLIB_FLAGS:-h =-header ) \
-tlb $@ \
-cpp_cmd $(TARGET_CPP) \
-mktyplib203
.odl{$O\}.tlb:
$(MIDL) $(MIDL_MKTYPLIB_FLAGS) $<
{..\}.odl{$O\}.tlb:
$(MIDL) $(MIDL_MKTYPLIB_FLAGS) $<
.tdl{$O\}.tlb:
$(MIDL) $(MIDL_MKTYPLIB_FLAGS) $<
{..\}.tdl{$O\}.tlb:
$(MIDL) $(MIDL_MKTYPLIB_FLAGS) $<
!else
.odl{$O\}.tlb:
@echo $(MKTYPLIB) /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $<
@$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $O\MyTypLib.TMP
$(CPPXX: =
)
-D__MKTYPLIB__
<<NOKEEP
@$(MKTYPLIB) /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $O\MyTypLib.TMP
{..\}.odl{$O\}.tlb:
@echo $(MKTYPLIB) /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $<
@$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $O\MyTypLib.TMP
$(CPPXX: =
)
-D__MKTYPLIB__
<<NOKEEP
@$(MKTYPLIB) /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $O\MyTypLib.TMP
.tdl{$O\}.tlb:
@echo $(MKTYPLIB) /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $<
@$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $O\MyTypLib.TMP
$(CPPXX: =
)
-D__MKTYPLIB__
<<NOKEEP
@$(MKTYPLIB) /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $O\MyTypLib.TMP
{..\}.tdl{$O\}.tlb:
@echo $(MKTYPLIB) /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $<
@$(C_PREPROCESSOR_NAME) @<<$(CL_RSP) /Tc$< > $O\MyTypLib.TMP
$(CPPXX: =
)
-D__MKTYPLIB__
<<NOKEEP
@$(MKTYPLIB) /tlb $@ -nocpp $(MKTYPLIB_FLAGS) $O\MyTypLib.TMP
!endif
# OSSINFO must be set in the *environment* for the ASN compiler to find its
# configuration file, $(OSSINFO)\ossinfo.
! ifndef OSSINFO
OSSINFO=$(BASEDIR)\public\sdk\lib
! endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -