• Visual Studio 2010 C++ 工程文件中添加自定义宏


    今天直接打开 vcxproj 文件查看了一下,发现工程文件中有如下一行:

    <PropertyGroup Label="UserMacros"/>

    于是在网上搜索了一番,没有发现太多有用的资料,因此抱着试一试的心情在该元素中增加了一些自定义宏,如下所示:

    <Suffix Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">UD32</Suffix>
    <Suffix Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">UD64</Suffix>
    <Suffix Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">UR32</Suffix>
    <Suffix Condition="'$(Configuration)|$(Platform)'=='Release|x64'">UR64</Suffix>

    增加上面的内容的目的是我的工程设置为 Unicode 字符集,同时针对不同的配置项目在输出的文件名的最后可以增加一个后缀,因此上面宏的内容的意思就是:字符集为 Unicode ,配置项目为: D=Debug R=Release ,平台为:32=X86 上的 32 位程序 64=x64上的 64 位程序;

    然后在输出配置项目中将 TargetName 统一设置为:$(ProjectName)$(Suffix) ,(注:此时在工程的宏列表中已经可以看到 Suffix 并且配置不同时起内容也不同)编译发现输出的动态库文件名已经已经根据配置自动的增加了后缀;

    如果需要配置多个宏,那么 Condition 属性就重复了,通过观察 vcxproj 文件发现向导生成的<PropertyGroup>中包含有 Condition ,于是作如下的修改:

    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="UserMacros">
    <Author>WonKerr</Author>
    <Suffix>UD32</Suffix>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="UserMacros">
    <Author>WonKerr</Author>
    <Suffix>UD64</Suffix>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="UserMacros">
    <Author>WonKerr</Author>
    <Suffix>UR32</Suffix>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="UserMacros">
    <Author>WonKerr</Author>
    <Suffix>UR64</Suffix>
    </PropertyGroup>

    然后使用 VS2010 打开该工程,查看属性,发现能够正确的识别,呵呵,这样针对不同的配置增加自己的特定的宏就方便多了;

    最后再分享一个自定义宏的方式,在上面的例子中如果 Author 在不同的配置中其实内容都是相同的,为了避免重复配置,可以将该宏配置在全局属性组中,如下所示:

    <PropertyGroup Label="Globals">
    <ProjectGuid>{D7E40A8B-116F-487A-9966-9F7B92942913}</ProjectGuid>
    <Keyword>Win32Proj</Keyword>
    <SccProjectName>SAK</SccProjectName>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
    <SccProvider>SAK</SccProvider>
    <Author>WonKerr</Author>
    </PropertyGroup>

    呵呵,这样一来可以把一些设置放置到全局属性组中,后面使用$()的形式引用这样就方便多了;

    补充:$(ProjectName)的默认值是工程文件的名称,例如 MyProj.Unicode.vcxproj 的工程名默认为 MyProj.Unicode ,可以通过在全局属性组中增加定义来覆盖默认的工程名称,增加下面一行即可将工程名修改MyProj

    <PropertyGroup Label="Globals">
    <...></...>
    <ProjectName>MyProj</ProjectName>
    <...></...>
    </PropertyGroup>
  • 相关阅读:
    Leetcode 5
    DFS输出全排列
    Leetcode 461
    Leetcode 4
    Leetcode 3
    Leetcode 2
    Windows 10 Mac 为Vs Code配置C/C++环境
    机器学习 学习笔记(1) -- 初识机器学习
    MacBook Pro休眠掉电、耗电量大问题解决方案
    Oracle错误及解决方案
  • 原文地址:https://www.cnblogs.com/WonKerr/p/VCXPROJ_USER_MACROS.html
Copyright © 2020-2023  润新知