Visual Studio属性配置中使用宏

在学习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://www.mzph.cn/news/351825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CodeForces - 500A-New Year Transportation(模拟)

New Year is coming in Line World! In this world, there are n cells numbered by integers from 1 to n, as a 1  n board. People live in cells. However, it was hard to move between distinct cells, because of the difficulty of escaping the cell. People wanted…

LeetCode-best time to buy and sell stock 1 数组

1.问题 Say you have an array for which the i th element is the price of a given stock on day i. If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit. …

linq 清除一条数据中的某个字段值_B端通用批量数据导入方案设计

点击上方蓝色字体,关注我B端通用批量数据导入方案设计文 | 3548字估计阅读 | 9分钟引题B端产品经常遇到大量数据录入的需求。如春季招聘完成后,给新招的120个员工建立员工档案,并创建员工帐号。如果逐条将大量的数据录入系统,将花…

Google C++单元测试框架(Gtest)系列教程之一——入门

引言 本文将先介绍单元测试的相关概念,然后引入Google的开源C单元测试框架Gtest,最后通过编译、运行Gtest自带的一个测试样例,介绍如何在Unix/Linux下使用Gtest。 单元测试 说到单元测试,大家应该不会陌生。作为软件开发过程…

luoguP3185 [HNOI2007]分裂游戏 枚举 + 博弈论

每个位置的瓶子中的每个石子是一个独立的游戏 只要计算出他们的\(sg\)值即可 至于方案数&#xff0c;反正不多\(n^3\)暴力枚举即可 反正怎么暴力都能过啊 复杂度\(O(Tn^3)\) #include <cstdio> #include <cstring> #include <iostream> #include <algorit…

opencv图像前景目标提取

1、功能 论文图片处理需要用到简单的前景目标提取&#xff0c;这里采用opencv的grabCut函数&#xff1b; 前期可以采用selectROI获取矩形框&#xff08;需要添加contrib库&#xff09;&#xff0c;也可以手动设定rect&#xff1b; 添加了一个图片批处理操作&#xff0c;glob函数…

内存结构 堆 栈 全局区 常量区 代码区

转载&#xff1a;https://blog.csdn.net/levy1021/article/details/45419381

批量提交 kafka_Kafka精华问答|kafka的使用场景是什么?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。作为一种高吞吐量的分布式发布订阅消息系统&#xff0c;有着诸多特性。今天&#xff0c;就让我们一起来看看关于它的精华问答吧&#xff01;1Q&a…

Gtest在vs 2010上的配置

找了好多文章&#xff0c;发现这篇是讲得最简便、正确的&#xff01; 以下为复制&粘贴的&#xff1a; [cpp] view plaincopyVS2010 gtest简易配置 使用一个简单的控制台来演示。 1.下载google test http://code.google.com/p/googletest/downloads/detail?nameg…

Python集合list,tuple,dict,set

Python四中集合list&#xff0c;tuple&#xff0c;dict&#xff0c;set list(有数组越界问题) 创建list&#xff1a;L [Michael, 100, True] 访问list&#xff1a;L[0] 倒序访问&#xff1a;L[-1] 添加新元素&#xff1a;L.append(paul)或者L.insert(0,paul) 删除元素与&#…

jmeter性能分析_使用JMeter和Yourkit进行REST / HTTP服务的性能分析

jmeter性能分析我的上一篇文章描述了如何使用JMeter完成异步REST / HTTP服务的压力测试或负载测试。 但是&#xff0c;运行这样的测试通常表明被测系统不能很好地应对增加的负载。 现在的问题是如何找到瓶颈&#xff1f; 深入研究代码以检测可疑部分可能是一种替代方法。 但是…

JAVA错误:无法从静态上下文中引用非静态变量 this

新学习&#xff1a;构造方法的重载&#xff0c;给成员变量赋值 错误代码&#xff1a; class Student {public static void main(String[] args) {Person p new Person();p.setAge(24);p.setName("杨洋");p.show();System.out.println("Hello World!");}…

datetime建立索引有用吗_超全的数据库建表、SQL、索引规范

背景因为工作岗位的原因&#xff0c;负责制定了关于后端组数据库的规约规范&#xff0c;作为所有产品线的规范&#xff0c;历经几版的修改&#xff0c;最终形成下边的文本&#xff0c;规范在整个后端执行也有大半年的时间&#xff0c;对于整个团队在开发阶段就减少不恰当的建表…

linux找不到动态链接库 .so文件的解决方法

如果使用自己手动生成的动态链接库.so文件&#xff0c;但是这个.so文件&#xff0c;没有加入库文件搜索路劲中&#xff0c;程序运行时可能会出现找不到动态链接库的情形。 可以通过ldd命名来查看可执行文件依赖的动态链接库&#xff0c;如下(其中D为可执行程序)&#xff1a; 其…

mui的学习图片预览

css部分 <link href"./css/mui.min.css" rel"stylesheet"/> <style> html,body {margin: 0px;padding: 0px;background-color: white;} .mui-preview-image.mui-fullscreen { position: fixed;z-index: 20; background-co…

Kafka Connect在MapR上

在本周的白板演练中&#xff0c;MapR的高级产品营销经理Ankur Desai描述了Apache Kafka Connect和REST API如何简化和提高在处理来自包括旧数据库或数据仓库在内的各种数据源的流数据时的敏捷性。 他还解释了使用MapR Streams与Kafka进行数据传输时此体系结构的差异。 其他资源…

LeetCode--palindrome-number回文数

1、问题 Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. Some hints: Could negative integers be palindromes? (ie, -1) If you are thinking of converting the integer to string, note the restriction of u…

如何取消 登录_LSAT | 退考、缺考、取消成绩,各自的区别和流程是怎样的?

专注顶尖法学院JD/LLM申请指导咨询&#xff0c;更多内容请关注联才微信公众号&#xff1a;wisdom-linked排版 | 联才; 编辑 | 联才掐指一算&#xff0c;现在距离6/23亚洲场LSAT考试只剩下15天的时间了&#xff0c;你目前的备考进展如何呢&#xff1f;如果你拿不准是否要去考试&…

gtest 编译、安装和使用

本例以 gtest-1.7.0 为例进行讲解。一、要求&#xff1a;1. 安装 cmake二、编译1. 下载 gtest 源码包&#xff0c;并解压&#xff0c;如&#xff1a;/home/hdc/gtest-1.7.0&#xff1b; 2. 编译 gtest 动态库&#xff0c;进入 gtest-1.7.0 目录&#xff0c;编辑 CMakeLists.tx…

ReentrantReadWriteLock读写锁的使用

类ReentrantLock具有完全互斥排他的效果&#xff0c;即同一时间只有一个线程在执行ReentrantLock.lock()后面的代码。这样虽然保证了线程的安全性&#xff0c;但是效率低下。JDK提供了ReentrantReadWriteLock读写锁&#xff0c;使用它可以加快效率&#xff0c;在某些不需要操作…