在学习C语言的时候,我们曾经遇到过一个宏的概念。宏的作用机理本质上是宏的展开,C语言中的宏的用法也有很多种(水其实很深...),不过从感觉上来讲,人们大致上会在以下的场景中,利用宏来解决一些窘境:一是为了避免重复书写同样性质代码时,会使用到宏;二是为了定义一些常量参数时,会使用到宏。另外,宏的意义也在于,当我们修改某个宏的定义时,便修改了所有引用宏的地方所展开的代码,这无疑节省了我们修改代码的工作量以及代码修改的灵活性。

在Visual Studio中进行C++工程属性的配置时,同样也会遇到与写代码类似的场景,例如我们可能会在不同的表单(同一个工程或者多个工程)中,填写相同的内容(例如某个路径)。这样就造成了一些重复性的劳动,而且填写时可能因为疏忽而造成错误,修改时也需要找到所有填写这个内容的地方。为了解决这个问题,Visual Studio在工程属性配置时,也提供了宏这样一个工具,来帮助我们减少这些无谓的辛劳。

C++工程属性中的宏

工程属性中的宏具体长得是什么样子呢?在打开工程属性时,我们在表单中可能经常会看到一些以美元符号($)为开头的字符串,$(SomeMacro)。其实这些字符串便是Visual Studio中默认定义的一些宏,它们其实就是代表一些与某个工程相关的常量字符串。在下图中我们可以看到一些这样默认定义的宏:

任意点击一个表单,然后点击Edit选项,便可以在弹出的窗口中,查看这些默认定义宏的含义。

注意到上面两个宏进行结合,对项目的输出路径(Output)进行了配置,也就是项目生成exe、lib或dll的地方。Visual Studio中还有很多类似这样的宏,有些宏还是和机器相关的,所以我们也可以利用其来进行工程配置,避免因为不同机器上路径不同而每台机器配置一次属性。对工程属性中默认定义的宏,微软的官方指南上也有一个比较详细的介绍。

http://msdn.microsoft.com/en-us/library/c02as0cs.aspx

      自定义工程属性中的宏

      那么我们如何自己定义工程属性中的宏呢?首先我们需要打开属性管理器选项卡(Property Manager),然后为工程添加一个属性页面(Property Sheet)。该属性页面在被添加后,会被当前的工程属性继承,于是便可以使用其中定义的宏了。

以上添加了一个宏,代表使用OpenCV第三方库的版本号,因为在第三方库升级时,库的名字也会随版本号发生改变;而使用了宏后,我们就可以很方便的修改引用库的名称了。下面我们可以回到原来的工程属性当中来,利用上面的宏定义引用库的名称。

我们可以看到,Linker当中所展开的命令行参数中,$(OpenCVLibVersion)已经被展开为245了。而以后在发生库版本的升级时,便可以只修改$(OpenCVLibVersion)这个宏便可以正常使用升级后的库了,所以这种方法还是很实用的吧。在工程属性的配置中,宏的使用场景还有很多,如果能够灵活使用,便可以节省很多的时间,避免很多因重复劳动所造成的错误,希望对大家也有帮助。

http://blog.csdn.net/raocong2010/article/details/9209591

Visual Studio属性配置中使用宏的更多相关文章

  1. 在visual studio工程设置中增加宏定义的方法

    在Solution Explorer中鼠标右键点击其project之后,Configuration(Release)->Configuration Propertity ->C++ -&g ...

  2. visual studio 2010配置驱动开发环境

    visual studio 2010 配置驱动开发环境 ** 工具/材料 VS2010.WDK开发包 **  配置过程 以下将讲述VS2010驱动开发环境的配置过程,至于必要软件的安装过程这里不再赘述 ...

  3. Win7系统Visual Studio 2013配置OpenCV3.1图文详解

    Win7系统Visual Studio 2013配置OpenCV3.1图文详解 OpenCV3.1对硬件加速和移动开发的支持相对于老版本都有了较大改进,支持新的开发工具,更易于扩展,配置方式也比以前简 ...

  4. [内核编程] visual studio 2010配置驱动开发环境

    visual studio 2010 配置驱动开发环境 ** 工具/材料 VS2010.WDK开发包 **  配置过程 以下将讲述VS2010驱动开发环境的配置过程,至于必要软件的安装过程这里不再赘述 ...

  5. Windows 7 Visual Studio 2008配置OpenGL开发环境

    Windows 7 Visual Studio 2008配置OpenGL开发环境 glut下载地址: http://www.opengl.org/resources/libraries/glut/gl ...

  6. Visual Studio Code配置GoLang开发环境

    Visual Studio Code配置GoLang开发环境 在Visual Studio Code配置GoLang开发环境 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页: ...

  7. Visual Studio Code配置

    Visual Studio Code 从1.23.0开始VS Code就不再默认提供各语言版本, 而是改为使用插件的方式提供语言包. 在插件商店搜索Chinese (Simplified), 安装. ...

  8. 在Visual Studio for Mac中使用fastlane管理iOS的provision

    Xamarin开发中,最烦的就是provision的管理了. 全手工的话,要先创建一个key,上传后生成cert文件,再创建provision.如果在手机上调试,还要把手机加到provision中去. ...

  9. Visual Studio 2019 preview中体验C# 8.0新语法

    准备工作: Visual Studio 2019 Preview版本中并没有包含所有的C# 8.0的新功能,但目前也有一些可以试用了.在开始之前,需要进行入两项设置: 将Framework设置为.ne ...

随机推荐

  1. javascript 验证 yyyy-MM-dd HH:mm:ss 的正则表达式

    原文:javascript 验证 yyyy-MM-dd HH:mm:ss 的正则表达式 ^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13 ...

  2. C语言 链表

    原文:C语言 链表 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能. ...

  3. Asp.Net MVC5入门学习系列④

    原文:Asp.Net MVC5入门学习系列④ 添加Model且简单的使用EF 对于EF(EntityFramework)不了解的朋友可以去百度文科或者在园子里搜一些简资源看下,假如和我一样知道EF的概 ...

  4. ASP.NET 5:初始化数据库

    ASP.NET 5:初始化数据库 1.初始化数据库 1.2目录 这不是专述模式/架构设计的帖子,架构搭建以讲解文章为目的,先不过多分层. 截这个图也是便于你对应下面找代码文件路径! 1.2代码 先控制 ...

  5. struts2注解redirect传递参数解决方案时,中国的垃圾问题

    struts2注解redirect传递参数解决方案时,中国的垃圾问题 试过很多方法  tomcat 编码  .字符串转换 .URLEncoder  .. 但是,没有解决方案,然后仔细阅读   stru ...

  6. MySQL在Windows和Linux减少数据库

    Linux减少数据库代码: 1,创建一个空数据库cddl mysql> create database cddl; Query OK, 1 row affected (0.00 sec) 2,还 ...

  7. WEB安全实战(五)XSS 攻击的第二种解决方式(推荐)

    序 说到 XSS 攻击,前边已经有两篇文章在讲这个事了,这次又拿出来说,主要是针对近期工作中的一些新的问题.那么之前是怎么解决问题的呢?为什么又要换解决方式?以下就具体的跟大家分享一下. 旧方案 公司 ...

  8. 使用oracle的exp命令时,提示出--hash: exp: command not found

    使用oracle的exp命令时,提示出--hash: exp: command not found 原因:当你在终端使用exp的命名时,当前的账户,并不是oracle认可的账户. 在安装oracle时 ...

  9. 转载:你需要知道的16个Linux服务器监控命令

    源址:http://web.itivy.com/article-653-1.html 如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Lin ...

  10. 基于Asterisk的VoIP开发指南——Asterisk 模块编写指南(1)

    原文:基于Asterisk的VoIP开发指南--Asterisk 模块编写指南(1) 1 开源项目概述 Asterisk是一个开源的软件包,通常运行在Linux操作系统平台上.Asterisk可以用三 ...