VCCLCompilerTool 属性 -VS2013版
来源:互联网 发布:webservice数据丢失 编辑:程序博客网 时间:2024/06/16 18:37
VCCLCompilerTool类型有以下成员:
以下vcxproj项目信息文件例子来分析:
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ClCompile> <WarningLevel>Level3</WarningLevel> <PrecompiledHeader>Use</PrecompiledHeader> <Optimization>MaxSpeed</Optimization> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SDLCheck>true</SDLCheck> <AdditionalIncludeDirectories>F:\temp\vrpn;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </ClCompile> <Link> <SubSystem>Console</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <AdditionalDependencies>NoLo_USBHID.lib;vrpn.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalLibraryDirectories>F:\temp\vrpn\buildout\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> </Link> </ItemDefinitionGroup>
1.AdditionalIncludeDirectories:获取或设置目录到include路径中。
它的三种方式:
1>.上面实例中的直接在vcxproj中写入
2>.利用cl.exe文件,使用命令行,比如MAIN.C中需要包含它所使用头文件的路径时,使用/I选项(可与GCC编译器类比理解):
CL /I \INCLUDE /I\MY\INCLUDE MAIN.C
3>.直接在属性页设置
2.PreprocessorDefinitions:获取或设置预处理定义。为源文件定义一个预处理标志。
它的三种方式:
1>.上面例子中直接添加到vcxproj。
2>.使用CL命令行/D选项,它与在文件开头#define定义一个宏起到的作用是一样的。它的格式如下:
/Dname[= | #[{string | number}] ]
默认情况下,/Dname是等于1的,它是与宏条件#ifdef #endif这些配合起来使用的。 比如以下代码例子,以/DTEST 编译它,TEST这个宏默认即为1:
// cpp_D_compiler_option.cpp// compile with: /DTEST#include <stdio.h>int main( ){ #ifdef TEST printf_s("TEST defined %d\n", TEST); #else printf_s("TEST not defined\n"); #endif}
整个编译过程,可以这样进行:
首先找到VS2013的开发人员命令提示这个工具,可以通过以下步骤查找:
Windows窗口左边找到VS 2013的目录,在它下面有一个Visual Studio Tools,打开后:
以管理员权限打开它后,切换到磁盘根目录,创建一个test目录,进入test目录,在test目录下使用notepad编辑器创建编辑一个test.c文件,将上面的代码例子拷贝进去,之后运行它,可看到得到的结果是1,也就是证明了/DTEST默认情况下的值是为1:
还可以改为/DTEST=3:
当要在DEBUG模式下编译时,可定义DEBUG标志:
CL /DDEBUG test.c
3>.是通过属性页来设置:
3.还有一个比较常用的:RuntimeLibrary,它的作用是获取或设置用于链接的运行时库,运行时库Windows都是以DLL(动态)或Lib(静态)形式出现,Linux以.so(动态)与.a(静态)出现的。
1>.在代码中设置,比如设置一个多线程MultiThreadedDLL时:
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
2>.使用命令行参数,它有/MD /MDd /MT /MTd /LD /LDd这些参数可选:
/MD:使应用程序使用运行时库的多线程与DLL版本。定义_MT与_DLL会使得编译器将库文件MSVCRT.lib放到.obj文件中去。
使用这个选项编译的应用程序会静态的链接到MSVCRT.lib文件上,该库提供了一个代码层来让链接器能够解析外部的引用。实际处理逻辑流程的工作代码时位于库文件MSVCReversionnumber.DLL中的,它在应用程序链接到库文件MSVCRT.lib期间必须时可用的。
/MDd:定义_DEBUG,_MT以及_DLL可使得应用程序使用debug版本的多线程与DLL库,它也会使得MSVCRTD.lib文件在编译时放到.obj上。
/MT:使得应用程序使用多线程的静态运行时库版本。定义_MT宏会使得编译器将库文件LIBCMT.lib放到.obj文件中去,因为链接器将会使用LIBCMT.lib文件来解析外部的symbol。
/MTd:定义_DEBUG与_MT宏会使得编译器将库文件LIBCMTD.lib放到.obj文件中去,因为链接器将会使用LIBCMTD.lib文件来解析外部的symbol。
/LD:
1>.创建一个DLL文件。传入/DLL选项到链接器后,链接器就会查找而不是请求一个含有DllMain的函数。如果此时没有写DllMain函数的话,链接器就会插入一个返回true的DllMain函数。
2>.链接DLL启动代码。
3>.创建一个导入库(.lib),如果没有在命令行上指定导出文件(.exp)。可以链接导入库到应用程序来调用DLL。
4>.将/Fe选项功能变为命名dll文件而不是exe文件,/Fe是给exe文件命名的,它能指定文件的名字和文件存放的路径。因此,默认的程序名会是basename.dll而不是basename.exe。
除非明显的指出是/MD,否则默认的都是/MT选项
/LDd:创建一个debug的DLL,定义宏_MT与_DEBUG。
3>.属性页设置:
msdn参考资料
- VCCLCompilerTool 属性 -VS2013版
- Link属性 -VS2013版
- VS2013中的属性
- OpenCV+VS2013 属性表配置
- VS2013配置opencv属性管理器
- opencv2.4.8 vs2013配置属性表
- MFC/VS2013对话框属性(三)
- vs2013添加opencv2.4.9属性表
- VS2013导入opencv320配置属性文件
- vs2013
- VS2013
- VS2013
- vs2013
- Could not generate command line for the ‘VCCLCompilerTool’ tool
- VS2013中,为MFC程序创建属性表单
- 修改 VS2013 项目属性的默认包含路径(全局)
- VS2013 下 使用Windows Caffe开发之配置属性文件
- Vs2013中opencv的配置(添加属性表)
- 用闭包获取li的索引值
- Object类源码解析
- Android 跳过 屏蔽 google Setupwizard
- [题解]bzoj4826 HNOI2017 影魔
- js中typeof的用法
- VCCLCompilerTool 属性 -VS2013版
- 利用iframe进行父页面和子页面的通信
- eclipse/Myeclipse自动适配jar包源码
- IntelliJ IDEA 使用心得与常用快捷键
- 责任链模式
- eclipse for php调试环境配置
- 关键帧的使用方法
- C# 泛型 WHERE 约束
- 给页面上的Date类型的item赋初始值