^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
date:2018.07.17
在vs中使用Qt、openCv等库都需要进行相应的属性配置,来设置C/C++的附加包含目录、链接器的附加依赖项等。为了不重复的对每一个项目工程进行重复配置,需要自己来新建一个项目属性列表。配置完成后保存,然后在每次新建工程后,手动添加现有属性表即可。
方法:视图 --> 其它窗口 --> 属性管理器 --> --> 添加新项目属性表 --> 进行相关配置 --> 保存 --> 添加现有属性表。
下面进行Vs2013 + Qt5.7.1 + openCv3.0的属性配置。(有空继续)
——————————————
date:2018.07.24(看来配置QT+OpenCv是要接着拖了=_=)
同事使用属性表文件.props时遇到了一些问题,这里单独写一下使用别人的属性表的方法:
第一步,在属性管理器中添加现有属性表。
可以看到属性管理器里有这么一坨,还有一个项目 -> 属性。。。那么VS会使用哪一个属性配置呢?
具体这几个分别是什么作用我也没去学习呢(欢迎留言)。。。现在只需要知道VS会默认使用项目 -> 属性中的配置,所以要把新添加的属性表的配置内容同步至这里。方法:检查需要更改配置的选项,选择“从父级或默认项目继承”。
遗留问题:如何对x64和x86平台分别进行属性配置?属性表改了x64后发现x86也会跟着改变,怎么办???
另外,有一个问题还没搞懂,我整理后再发出来*******************88888888888
——————————————
***************************************************分割线*************************************************
date:2018.07.23
学习一下vs的项目属性配置项:
>1. 首先,需要清楚解决方案和项目文件的包含关系:新建一个C++项目xia,解决方案命名为wuhao:可以看到文件夹结构为../wuhao/xia/,即项目文件夹位于.sln文件的同级目录下,解决方案文件夹包含所有内容。如果在此解决方案下,新建另一个项目2013(当然,文件夹../2013与../xia位于同一级目录下),解决方案管理器视图如下:
这时分别对项目xia和项目2013进行Debug / Release ,发现有多个Debug / Release 文件夹:
以Debug为例,解决方案文件夹../wuhao下的Debug文件夹内的内容为:——存放的是可执行文件.exe和.dll文件
看一下项目文件夹../xia:
../xia下的Debug文件夹内的内容为:——存放的是中间编译结果.obj
————————————
发散一下:在使用别人的工程文件时,经常需要配置一堆属性。然而使用自己新建的项目属性表xxx.props时,总是会出现错误。为什么呢?
先搞懂拷贝来的工程文件包含的配置文件:有两种——解决方案的配置文件.sln、项目的配置文件.vcxproj。.sln主要是管理解决方案里面的多个项目的.vcxproj。一般没有.sln也可以直接打开.vcxproj,也可以重新生成sln。.vcxproj管理的是工程中的细节,比如包含文件、引用库、附加依赖项等。
————————————
>2. 另外,常用项目属性和系统配置变量关系:
注:项目属性设置的目录起点为项目配置文件所在位置,即为项目文件夹下层目录
注意哦,这里说的只有目录~~~
项目的默认属性页设置:
配置属性 -> 常规:
所以在Debug时会在解决方案../wuhao/文件夹内生成输出目录../wuhao/Debug/文件夹;在项目文件夹../wuhao/xia/文件夹内生成中间目录../wuhao/xia/Debug/文件夹;在输出目录../wuhao/Debug/文件夹内生成目标文件../wuhao/Debug/xia.exe;
链接器 -> 常规:
这里的$(OutDir)即为输出目录定义的$(Solution)$(Configuration)\,$(TargetName)为目标文件名定义的$(ProjectName),$(TargetExt)为目标文件扩展名定义的.exe。
另外注意,$(TargetDir)和$(TargetPath)的值是在输出文件.exe生成后才确定的。
调试:
工作目录:可以看到工作目录的属性为$(ProjectDir),即../wuhao/xia/。它的作用是:程序运行后唯一识别的默认目录(即程序只认识这个目录)。例如:程序运行中生成一个.csv文件,在创建时只指定了文件名而未指定路径,那么它就默认生成在工作目录内。一般也会把插件的动态链接文件.dll放在这里。
命令:这个属性表示调试器要启动的exe文件的全名(包含路径名),默认为$(TargetPath)。
————————————————
补充一下vs的工作目录:VS中的工作目录的设置是给调试用的,也即你启动调试后,启动一个新进程,自动把这个新进程的工作目录设置为vs项目属性中的工作目录,然后新进程启动对应的exe程序。但是如果不使用vs的调试启动exe,而是直接双击exe文件启动一个新进程时,会自动把这个新进程的工作目录设置为exe文件所在的目录,这是和vs启动调试不同的地方。所以如果发布的时候不把工作目录内的东西拷到exe所在的目录内,就会运行出错,因为此时工作目录不再是vs中设置的了,而是exe文件所在的目录。最后,说一下,vs中默认的vc++工程的工作目录项目的值是空的,代表默认是vs工程所在目录即.vcproj文件所在目录。
————————————————
链接器 -> 输入 -> 附加依赖项:
此项是设置程序链接时使用的静态链接库.lib,相当于链接已经编译好了的“代码”。由此我们可以简单的认为这些库就相当于我们自己写的.cpp文件,只不过这些库是编译好了的.cpp而已(这里只需要库名称即可,搜索路径在其他地方设置:链接器 -> 常规 -> 附加库目录)。
“附加依赖性的设置”等同于在代码中写“#pragma comment(lib, "库名称.lib") ”语句,如果使用相对路径则如下:
#pragma comment(lib,"..\\debug\\TestLib.lib");其中的反斜杠要用双反斜杠,因为它是由程序解释的双引号包括的字符串,需要转义一下,要区别include,#include "..\TestVideoApplication.h"中并不是由程序解释的字符串,所以不用转义。
**************************************************************************************************
可参考:MSDN Working with Project Properties