📄 msvc_objectmodel.cpp
字号:
TurnOffAssemblyGeneration = _True; } else if(*(option+5) == 'p') { CompileAsManaged = managedAssemblyPure; } else if(*(option+5) == 's') { CompileAsManaged = managedAssemblySafe; } else if(*(option+5) == 'o') { CompileAsManaged = managedAssemblyOldSyntax; } else if(*(option+5) == 'i') { CompileAsManaged = managedAssembly; warn_msg(WarnLogic, "initialAppDomain enum value unknown, using /crl default"); } else { CompileAsManaged = managedAssembly; } } } else { found = false; break; } break; case 'd': if(second != 'r') { found = false; break; } CompileAsManaged = managedAssembly; break; case 'f': if(second == 'p' && third == ':') { // Go to the end of the option const char *c = option + 4; while (*c != '\0' && *c != ' ' && *c != '-') ++c; switch (fourth) { case 'e': FloatingPointExceptions = ((*c) == '-' ? _False : _True); break; case 'f': FloatingPointModel = floatingPointFast; break; case 'p': FloatingPointModel = floatingPointPrecise; break; case 's': FloatingPointModel = floatingPointStrict; break; default: found = false; break; } } break; case 'n': if(second == 'o' && third == 'B' && fourth == 'o') { AdditionalOptions += "/noBool"; break; } if(second == 'o' && third == 'l' && fourth == 'o') { SuppressStartupBanner = _True; break; } found = false; break; case 's': if(second == 'h' && third == 'o' && fourth == 'w') { ShowIncludes = _True; break; } found = false; break; case 'u': UndefineAllPreprocessorDefinitions = _True; break; case 'v': if(second == 'd' || second == 'm') { AdditionalOptions += option; break; } found = false; break; case 'w': switch (second) { case '\0': WarningLevel = warningLevel_0; break; case 'd': DisableSpecificWarnings += option+3; break; default: AdditionalOptions += option; } break; default: AdditionalOptions += option; break; } if(!found) { warn_msg(WarnLogic, "Could not parse Compiler option: %s, added as AdditionalOption", option); AdditionalOptions += option; } return true;}// VCLinkerTool -----------------------------------------------------VCLinkerTool::VCLinkerTool() : EnableCOMDATFolding(optFoldingDefault), GenerateDebugInformation(unset), GenerateMapFile(unset), HeapCommitSize(-1), HeapReserveSize(-1), IgnoreAllDefaultLibraries(unset), IgnoreEmbeddedIDL(unset), IgnoreImportLibrary(_True), LargeAddressAware(addrAwareDefault), LinkDLL(unset), LinkIncremental(linkIncrementalDefault), LinkTimeCodeGeneration(unset), MapExports(unset), MapLines(unset), OptimizeForWindows98(optWin98Default), OptimizeReferences(optReferencesDefault), RegisterOutput(unset), ResourceOnlyDLL(unset), SetChecksum(unset), ShowProgress(linkProgressNotSet), StackCommitSize(-1), StackReserveSize(-1), SubSystem(subSystemNotSet), SupportUnloadOfDelayLoadedDLL(unset), SuppressStartupBanner(unset), SwapRunFromCD(unset), SwapRunFromNet(unset), TargetMachine(machineNotSet), TerminalServerAware(termSvrAwareDefault), TurnOffAssemblyGeneration(unset), TypeLibraryResourceID(0){}XmlOutput &operator<<(XmlOutput &xml, const VCLinkerTool &tool){ return xml << tag(_Tool) << attrS(_Name, _VCLinkerTool) << attrX(_AdditionalDependencies, tool.AdditionalDependencies, " ") << attrX(_AdditionalLibraryDirectories, tool.AdditionalLibraryDirectories) << attrX(_AdditionalOptions, tool.AdditionalOptions, " ") << attrX(_AddModuleNamesToAssembly, tool.AddModuleNamesToAssembly) << attrS(_BaseAddress, tool.BaseAddress) << attrX(_DelayLoadDLLs, tool.DelayLoadDLLs) << attrE(_EnableCOMDATFolding, tool.EnableCOMDATFolding, /*ifNot*/ optFoldingDefault) << attrS(_EntryPointSymbol, tool.EntryPointSymbol) << attrX(_ForceSymbolReferences, tool.ForceSymbolReferences) << attrS(_FunctionOrder, tool.FunctionOrder) << attrT(_GenerateDebugInformation, tool.GenerateDebugInformation) << attrT(_GenerateMapFile, tool.GenerateMapFile) << attrL(_HeapCommitSize, tool.HeapCommitSize, /*ifNot*/ -1) << attrL(_HeapReserveSize, tool.HeapReserveSize, /*ifNot*/ -1) << attrT(_IgnoreAllDefaultLibraries, tool.IgnoreAllDefaultLibraries) << attrX(_IgnoreDefaultLibraryNames, tool.IgnoreDefaultLibraryNames) << attrT(_IgnoreEmbeddedIDL, tool.IgnoreEmbeddedIDL) << attrT(_IgnoreImportLibrary, tool.IgnoreImportLibrary) << attrS(_ImportLibrary, tool.ImportLibrary) << attrE(_LargeAddressAware, tool.LargeAddressAware, /*ifNot*/ addrAwareDefault) << attrT(_LinkDLL, tool.LinkDLL) << attrE(_LinkIncremental, tool.LinkIncremental, /*ifNot*/ linkIncrementalDefault) << attrT(_LinkTimeCodeGeneration, tool.LinkTimeCodeGeneration) << attrS(_LinkToManagedResourceFile, tool.LinkToManagedResourceFile) << attrT(_MapExports, tool.MapExports) << attrS(_MapFileName, tool.MapFileName) << attrT(_MapLines, tool.MapLines) << attrS(_MergedIDLBaseFileName, tool.MergedIDLBaseFileName) << attrS(_MergeSections, tool.MergeSections) << attrS(_MidlCommandFile, tool.MidlCommandFile) << attrS(_ModuleDefinitionFile, tool.ModuleDefinitionFile) << attrE(_OptimizeForWindows98, tool.OptimizeForWindows98, /*ifNot*/ optWin98Default) << attrE(_OptimizeReferences, tool.OptimizeReferences, /*ifNot*/ optReferencesDefault) << attrS(_OutputFile, tool.OutputFile) << attr(_ProgramDatabaseFile, tool.ProgramDatabaseFile) << attrT(_RegisterOutput, tool.RegisterOutput) << attrT(_ResourceOnlyDLL, tool.ResourceOnlyDLL) << attrT(_SetChecksum, tool.SetChecksum) << attrE(_ShowProgress, tool.ShowProgress, /*ifNot*/ linkProgressNotSet) << attrL(_StackCommitSize, tool.StackCommitSize, /*ifNot*/ -1) << attrL(_StackReserveSize, tool.StackReserveSize, /*ifNot*/ -1) << attrS(_StripPrivateSymbols, tool.StripPrivateSymbols) << attrE(_SubSystem, tool.SubSystem) << attrT(_SupportUnloadOfDelayLoadedDLL, tool.SupportUnloadOfDelayLoadedDLL) << attrT(_SuppressStartupBanner, tool.SuppressStartupBanner) << attrT(_SwapRunFromCD, tool.SwapRunFromCD) << attrT(_SwapRunFromNet, tool.SwapRunFromNet) << attrE(_TargetMachine, tool.TargetMachine, /*ifNot*/ machineNotSet) << attrE(_TerminalServerAware, tool.TerminalServerAware, /*ifNot*/ termSvrAwareDefault) << attrT(_TurnOffAssemblyGeneration, tool.TurnOffAssemblyGeneration) << attrS(_TypeLibraryFile, tool.TypeLibraryFile) << attrL(_TypeLibraryResourceID, tool.TypeLibraryResourceID, /*ifNot*/ rcUseDefault) << attrS(_Version, tool.Version) << closetag(_Tool);}// Hashing routine to do fast option lookups ----// Slightly rewritten to stop on ':' ',' and '\0'// Original routine in qtranslator.cpp ----------static uint elfHash(const char* name){ const uchar *k; uint h = 0; uint g; if(name) { k = (const uchar *) name; while((*k) && (*k)!= ':' && (*k)!=',' && (*k)!=' ') { h = (h << 4) + *k++; if((g = (h & 0xf0000000)) != 0) h ^= g >> 24; h &= ~g; } } if(!h) h = 1; return h;}//#define USE_DISPLAY_HASH#ifdef USE_DISPLAY_HASHstatic void displayHash(const char* str){ printf("case 0x%07x: // %s\n break;\n", elfHash(str), str);}#endifbool VCLinkerTool::parseOption(const char* option){#ifdef USE_DISPLAY_HASH // Main options displayHash("/ALIGN"); displayHash("/ALLOWBIND"); displayHash("/ASSEMBLYMODULE"); displayHash("/ASSEMBLYRESOURCE"); displayHash("/BASE"); displayHash("/DEBUG"); displayHash("/DEF"); displayHash("/DEFAULTLIB"); displayHash("/DELAY"); displayHash("/DELAYLOAD"); displayHash("/DLL"); displayHash("/DRIVER"); displayHash("/ENTRY"); displayHash("/EXETYPE"); displayHash("/EXPORT"); displayHash("/FIXED"); displayHash("/FORCE"); displayHash("/HEAP"); displayHash("/IDLOUT"); displayHash("/IGNORE"); displayHash("/IGNOREIDL"); displayHash("/IMPLIB"); displayHash("/INCLUDE"); displayHash("/INCREMENTAL"); displayHash("/LARGEADDRESSAWARE"); displayHash("/LIBPATH"); displayHash("/LTCG"); displayHash("/MACHINE"); displayHash("/MAP"); displayHash("/MAPINFO"); displayHash("/MERGE"); displayHash("/MIDL"); displayHash("/NOASSEMBLY"); displayHash("/NODEFAULTLIB"); displayHash("/NOENTRY"); displayHash("/NOLOGO"); displayHash("/OPT"); displayHash("/ORDER"); displayHash("/OUT"); displayHash("/PDB"); displayHash("/PDBSTRIPPED"); displayHash("/RELEASE"); displayHash("/SECTION"); displayHash("/STACK"); displayHash("/STUB"); displayHash("/SUBSYSTEM"); displayHash("/SWAPRUN"); displayHash("/TLBID"); displayHash("/TLBOUT"); displayHash("/TSAWARE"); displayHash("/VERBOSE"); displayHash("/VERSION"); displayHash("/VXD"); displayHash("/WS "); displayHash("/libpath");#endif#ifdef USE_DISPLAY_HASH // Sub options displayHash("UNLOAD"); displayHash("NOBIND"); displayHash("no"); displayHash("NOSTATUS"); displayHash("STATUS"); displayHash("AM33"); displayHash("ARM"); displayHash("CEE"); displayHash("EBC"); displayHash("IA64"); displayHash("X86"); displayHash("X64"); displayHash("M32R"); displayHash("MIPS"); displayHash("MIPS16"); displayHash("MIPSFPU"); displayHash("MIPSFPU16"); displayHash("MIPSR41XX"); displayHash("PPC"); displayHash("SH3"); displayHash("SH3DSP"); displayHash("SH4"); displayHash("SH5"); displayHash("THUMB"); displayHash("TRICORE"); displayHash("EXPORTS"); displayHash("LINES"); displayHash("REF"); displayHash("NOREF"); displayHash("ICF"); displayHash("WIN98"); displayHash("NOWIN98"); displayHash("CONSOLE"); displayHash("EFI_APPLICATION"); displayHash("EFI_BOOT_SERVICE_DRIVER"); displayHash("EFI_ROM"); displayHash("EFI_RUNTIME_DRIVER"); displayHash("NATIVE"); displayHash("POSIX"); displayHash("WINDOWS"); displayHash("WINDOWSCE"); displayHash("NET"); displayHash("CD"); displayHash("NO");#endif bool found = true; switch (elfHash(option)) { case 0x3360dbe: // /ALIGN[:number] case 0x1485c34: // /ALLOWBIND[:NO] case 0x6b21972: // /DEFAULTLIB:library case 0x396ea92: // /DRIVER[:UPONLY | :WDM] case 0xaca9d75: // /EXETYPE[:DYNAMIC | :DEV386] case 0x3ad5444: // /EXPORT:entryname[,@ordinal[,NONAME]][,DATA] case 0x33aec94: // /FIXED[:NO] case 0x33b4675: // /FORCE:[MULTIPLE|UNRESOLVED] case 0x3dc3455: // /IGNORE:number,number,number,number ### NOTE: This one is undocumented, but it is even used by Microsoft. // In recent versions of the Microsoft linker they have disabled this undocumented feature. case 0x7988f7e: // /SECTION:name,[E][R][W][S][D][K][L][P][X][,ALIGN=#] case 0x0348992: // /STUB:filename case 0x0034bc4: // /VXD case 0x0034c50: // /WS AdditionalOptions += option; break; case 0x679c075: // /ASSEMBLYMODULE:filename AddModuleNamesToAssembly += option+15; break; case 0x062d065: // /ASSEMBLYRESOURCE:filename LinkToManagedResourceFile = option+18; break; case 0x0336675: // /BASE:{address | @filename,key} // Do we need to do a manual lookup when '@filename,key'? // Seems BaseAddress only can contain the location... // We don't use it in Qt, so keep it simple for now BaseAddress = option+6; break; case 0x3389797: // /DEBUG GenerateDebugInformation = _True; break; case 0x0033896: // /DEF:filename ModuleDefinitionFile = option+5; break; case 0x338a069: // /DELAY:{UNLOAD | NOBIND} // MS documentation does not specify what to do with // this option, so we'll put it in AdditionalOptions AdditionalOptions += option; break; case 0x06f4bf4: // /DELAYLOAD:dllname DelayLoadDLLs += option+11; break; case 0x003390c: // /DLL // This option is not used for vcproj files break; case 0x33a3979: // /ENTRY:function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -