zoukankan      html  css  js  c++  java
  • 常用cl编译命令参数解释(转)

    1. 1>  cl /c /IC:...include /ZI /nologo- /W3 /WX- /sdl /Od /Oy- /D WIN32 /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yc"stdafx.h" /Fp"DebugHelloWorld.pch" /Fo"Debug\" /Fd"Debugvc110.pdb" /Gd /TP /analyze- /errorReport:prompt stdafx.cpp  
    2. 1>cl : Command line warning D9035: option 'nologo-' has been deprecated and will be removed in a future release  
    3. 找到了MSDN的文档:

      http://msdn.microsoft.com/en-us/library/vstudio/9s7c9wdw.aspx

      也可以在Developer Command Prompt for VS2012终端窗口中输入cl /? 获得帮助信息。


      /c 代表只编译不链接。

      /I 指定头文件的目录

      /C 在编译期间保留代码注释,这里和/I连在一起使用,/IC

      首先介绍一个概念,VC中有个PDB文件,全称是Program Database,用来存放程序信息的小的数据库文件。

      编译Debug版本时,调试信息需要保留,我们可以选择直接将调试信息写到.obj文件中,或者存到.pdb文件中。

      /Z7 不产生.pdb文件,将所有调试信息存入.obj文件中

      /Zi和/ZI 都产生.pdb文件,不过/ZI支持"编辑继续调试"功能, (the edit and continue feature), 看上去更酷,但是我从来没有用过这个功能。

      /ZI有一些边际效应,会禁止#pragma optmize 指令,也不能和/clr一起用。

      /nologo- 已经无效,自己生成命令行的时候,没必要用了。

      /W3 也中警告级别,VC提供了很多警告级别,参考http://msdn.microsoft.com/en-us/library/vstudio/thxezb7y.aspx

      自己编译的话,直接用/Wall最好。

      /WX- 不太明白为什么有 - 号,(估计是和:NO的意思相同,也就是不启用该功能), /WX的意思是将warning转变成error,这样强迫消除所有的warning,如果和/Wall一起使用,那是最好的。

      /sdl 是对代码进行安全检查,如果发现相关警告,转变成错误输出

      /Od 禁止优化

      /Oy- 禁止该选项,该选项如果没有 - 号,则会在x86上编译时忽略frame-pointer,起到加速程序的作用。 frame-pointer,我暂时不知道是啥。

      /D 预处理定义,后面可以跟不同的参数都是宏啊,比如

      [plain] view plain copy
       
       print?
      1. /D WIN32 /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE  


      /Gm 启用最小化重新编译, VC用.idb保留了上次编译的缓存信息,包括文件依赖关系。下次编译时可以使用.idb文件用来检查,跳过不需要重新编译的文件。

      /EH 异常处理模式,后面可以接一些参数:http://msdn.microsoft.com/en-us/library/vstudio/1deeycx5.aspx

      通常都用/EHsc

      /RTC 运行时错误检查,参考:http://msdn.microsoft.com/en-us/library/vstudio/8wtf2dfz.aspx

      /MDd 和上面一个都很重要,使用Debug版本的多线程运行时动态库,参考:http://msdn.microsoft.com/en-us/library/vstudio/2kzt1wy3.aspx

      /GS 缓冲区安全检查

      看到这里,发现cl其实参数很多很多,VC提供了默认的选项,一般都够用。不过仔细分析一下,还是能够对cl的特性了解不少,对于提高编译器的认识还是很有好处的。

      /fp:precise 是和浮点数相关,参考:http://msdn.microsoft.com/en-us/library/vstudio/e7s85ffb.aspx

      /Zc:wchar_t 指定wchar_t是native type,我现在还不不清楚有什么作用。

      /Zc:forScope用/Ze来实现标准C++的for循环, /Ze已经被废除,所以这个选项似乎没什么意义。

      /Yc "stdafx.h" 制定stdafx.h为预编译头文件

      /Fp"DebugHelloWorld.pch" 指定预编译文件, 这样staafx.h编译出的内容放在HelloWorld.pch中,可以大大提高编译速度。因为VC中的预编译文件很大,每次重新编译很耗时。

      /Fo"Debug\" 指定.obj文件存放在Debug目录下

      /Fd"Debugvc110.pdb" 指定pdb文件路径,pdb前面已经介绍过了。

      /Gd 仅用于x86平台。如果C++函数没有显示指定__stdcall或者__fastcall,就采用__cdecl

      /Tp 指定C++源文件

      /analyze- 这是关闭代码分析功能

      /errorReport:prompt 提示内部错误信息

      以上是编译用的参数解释。后面还会看一下链接用的参数。

      http://blog.csdn.net/csfreebird/article/details/9769905

    4. 原文转自:https://www.cnblogs.com/findumars/p/7433780.html
  • 相关阅读:
    Title标题及Description描述字数
    网站优化十忌
    link和domain的区别
    什么是回合制游戏
    人文社科核心、中文核心、北大核心期刊
    锚文本
    笔记本声音尖叫的问题
    Educational Technology Journals(转)
    配置SharePoint门户网站的基本思路
    SEO 如何优化单个页面16招
  • 原文地址:https://www.cnblogs.com/Cody-map-01/p/14184335.html
Copyright © 2011-2022 走看看