VCCLCompilerTool 属性 -VS2013版

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参考资料


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值