Visual studio 配置
解决方案
一个解决方案的文件结构:
.sln 项目目录 debug release |
其中,debug与release放置最终生成的dll或exe,项目目录下包含
头文件 源文件 debug release .proj等 |
项目debug与release只放置编译的中间结果obj
路径
General->outputdirectory 确定输出目录,即为OutDir
Linker->general->outputfile 确定具体的输出文件名称
Linker->advanced->inport libraty可以设置dll的导入库lib,不大好用..
Debugging->command,确定调试时候启动的文件名,通常为outputfile
Debugging->Workingdirectory,调试时候的当前工作目录(只适用于vs调试),调试时可以获得当前目录下的dll等
VC++目录
可执行目录:包含可执行文件的目录,通常是名字叫bin的文件夹,存放了.exe、.dll文件,对应这环境变量中的PATH( 可执行程序的查找路径)
包含文件:对应了系统环境的INCLUDE变量,文件夹下通常包含的都是一些头文件.h或者.c、.cpp文件;
引用文件目录:则对应LIBPATH目录,通常指向使用#Using指令在代码中引用的程序集和模块(c#中的引用);
库文件目录:对应LIB环境变量,其文件夹下通常包含的是.lib这样的静态库;
排除目录: 是指再依赖文件目录下的一些文件可能混淆真正必须的文件,那么我们就需要使用这个目录来剔除不需要的文件避免出错;
外部lib/dll
通常来说,由于dll并非直接合并至应用中,Visual Studio 链接外部dll 文件配置方式可以有:
1. 直接添加到系统的 PATH变量里:
方法最简单直接,坏处是会影响全局的 PATH 设置,尤其是包含着大量测试用 dll 时。
2. 在 Visual Studio 全局设置里,把 dll 所在目录添加到 PATH 里:
通过 Visual Studio 菜单 ==> 工具 ==> 选项 ==> 项目和解决方案 ==> VC++目录,在下拉框里选择"可执行文件",然后把 dll 所在路径添加进去。
3. 直接把所有 dll 拷贝到 Visual Studio 工程目录下,或是拷贝到生成可执行文件的文件夹(默认情况下是Debug 或 Release 目录)下:
这个方法也很简单,但是当你有若干个工程时,你每次更新 SDK 及其 dll 文件,你就要把所有的工程都更新,这个不符合文件唯一性的工程性准则。
4. 在调试程序时,让 Visual Studio 帮你切换当前工作目录到 dll 相应的目录下:
在 Visual Studio ==> Project ==> Properties ==> SelectConfiguration ==> Configuration Properties ==> Debugging ==> Workingdirectory 里填上 dll 所在目录,这样当在调试程序时,Visual Studio 会把当前工作目录切换到这个目录下,从而会自动读取本目录下的dll 文件。
这个方法的优点很明显,简单!副作用也很明显,在你切换了当前工作目录后,你可能会找不到程序的配置文件,在程序里写的诸如"./config.ini"全部都找不到了;另外,你要把所有的dll 都放到这个工作目录里,否则一样会提示说找不到 xxx.dll 的问题。
5. 最后一个方法,也是我认为最好的一个方法,在 VisualStudio 工程属性里把一个目录临时添加到 PATH 环境变量里:
MSDN 上也有类似的介绍:How to: SetEnvironment Variables for Projects,方法很简单,在"工程属性" ==> "调试" ==> "环境"里,添加类似如下所示的内容:
PATH=%PATH%;$(TargetDir)\DLLS
这样就可以把 $(TargetDir)\DLLS 临时添加到该工程所属的系统 PATH 里。
开发时可以根据项目的实际情况,灵活选用以上方法。
DLL 文件有两类:
1 标准的 DLL 函数库,需要在 VB 中声明并调用函数。 一般情况下,它与应用在同一路径下,或放在一些特殊文件路径。
我们常说的系统 API 就属于这一类。
2 ActiveX DLL,需要注册才能使用。但它带来的好处是,它可以放在任意目录下。VB 所生成的 DLL 属于这一类。
导入库
导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息
有了导入库,调用dll时候,只要包含对应的头文件,可以接调用函数,而不需要使用LoadLibrary+GetProcAddress手动调用dll中的函数
应用程序链接DLL文件
如果应用程序使用LoadLibrary显式链接,那么在这个函数的参数中可以指定DLL文件的完整路径。如果不指定路径,或是进行隐式链接,Windows将遵循下面的搜索顺序来定位DLL:
1. 包含EXE文件的目录, 2. 进程的当前工作目录,
3. Windows系统目录, 4. Windows目录,
5. 列在Path环境变量中的一系列目录。
第三方库
在程序开发中,很多时候需要用到别人开发的工具包,如OpenCV和itk。一般而言,大部分是使用对类进行声明的头文件和封装了类的链接库(静态lib或动态dll)。
如果要使用这些类,需要在文件中包含头文件的名字,如#include
“cv.h”。但这个并不够,因为这个文件一般来说不在当前目录下,有两种方法解决这个问题。
一,将所包含的头文件复制到当前目录下,这个比较有局限性,因为如果头文件太多,这样比较麻烦。
二,将头文件所在的路径包括进去,即添加包含(include)文件目录。两种方法:
A. 依次打开“项目——属性——配置属性——C++——常规——附加包含目录”中加入所有的路径。这里需要注意的是路径必须指向头文件所在的子文件夹,而不能直到父文件夹就结束;每个路径不需要加上双引号,输入了之后,vs2008会自动加上双引;如果是多个路径,路径直接用“;”隔开。
B. [菜单]“工具->选项->项 目和解决方案->C++ 目录”,选择对应平台,然后添加所需“包括文件”目录。
除了头文件以外,也需要告诉编译器,类在哪里实现的,即封装类的链接库在哪里,这样程序才能执行工具包中的函数。
首先需要将链接库的路径输入vs2008,即添加库(libs)文件目录。两种方法:
A. 依次打开“项目——属性——配置属性——链接器——常规——附加库目录”中加入链库的路径。
B. [菜单]“工具->选项->项目和解决方案->C++ 目录”,选择对应平台。然后添加所需“库文件”目录,即添加编译所需要(依赖)的
lib 文件 。在“项目——属性——配置属性——链接器——常规——输入——附加依赖项”中加入链接库的名字,多个lib用空格隔开。(等同于“#pragma comment(lib, “xxx.lib”)
”语句)。
Pragma comment
例如:pragma comment ( lib,"wpcap.lib" )
表示链接wpcap.lib这个库。和在工程设置里写上链入wpcap.lib的效果一样,不过这种方法写的 程序别人在使用你的代码的时候就不用再设置工程settings了。告诉连接器连接的时候要找ws2_32.lib,这样你就不用在linker的lib设置里指定这个lib了。
Visual studio 配置的更多相关文章
- openGL学习:Visual Studio配置OpenGL
Visual Studio配置OpenGL 分两步: (一)下载glut,并将其放置到适当的位置 (二) 进行vs2005项目属性配置 ******************************** ...
- NUint使用详解及Visual Studio配置
NUint使用详解及Visual Studio配置 阅读目录 什么是单元测试? 为什么使用单元测试? NUint使用详解: 示例 属性 断言 简单测试 VS配置: External Tools Vis ...
- visual studio 配置属性中增加自定义宏和宏值
visual studio中有一些预先定义的宏,用于配置项目属性,如SolutionDir.我们也可以自定义类似的宏,从而在配置包含目录(include)或添加依赖项时简化配置项. 如何创建自己的宏呢 ...
- Visual Studio配置C/C++-PostgreSQL(9.6.3)开发环境(ZT)
https://www.2cto.com/database/201707/658910.html 开发环境 Visual Studio 2017[15.2(26430.16)] PostgreSQL ...
- visual studio 配置OpenGL环境
首先在网上下载一个GLUT工具包. glut.zip,大约一百多kb. 解压之后得到这么几个文件: 将glut.h复制到C:\Program Files (x86)\Microsoft Visual ...
- Visual Studio 配置 Avalon 自动补全
以VS2013为例: 1.关闭 Visual Studio 2.打开 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packa ...
- opencv3 学习一 - Visual Studio 配置
Step 1 下载最新版的Opencv3.4.2,见图片中的网址,选择 Win Pack. Step 2 安装Opencv3 到指定目录,见图片,路径后面会用到. Step 3 把安装目录下的bin路 ...
- mac 安装 visual studio 配置
前言:今天主要分享的是 Mac 下一款编程软件--Visual Studio,的确,这款软件之前一直是只有 Windows 系统独占的,2017年终于开发了 Mac 版本. 微软这次为 Mac 开发者 ...
- Visual Studio 配置 fftw 库
前提条件: 1.vs 2010 +(我的是2019): 2.下载 fftw. 先将vs 的 msvc 编译器的位置添加到path,一般在下面这个目录下: Microsoft Visual Studio ...
随机推荐
- 微信小程序中用户登录和登录态维护
提供用户登录以及维护用户的登录状态,是一个拥有用户系统的软件应用普遍需要做的事情.像微信这样的一个社交平台,如果做一个小程序应用,我们可能很少会去做一个完全脱离和舍弃连接用户信息的纯工具软件. 让用户 ...
- split函数用法
split函数详解 split翻译为分裂. split()就是将一个字符串分裂成多个字符串组成的列表. split()当不带参数时以空格进行分割,当代参数时,以该参数进行分割. //---当不带 ...
- 5行代码实现微信小程序图片上传与腾讯免费5G存储空间的使用
本文介绍了如何在微信小程序开发中使用腾讯官方提供的云开发功能快速实现图片的上传与存储,以及介绍云开发的 5G 存储空间的基本使用方法,这将大大提高微信小程序的开发效率,同时也是微信小程序系列教程的视频 ...
- python 判断网络通断同时检测网络的状态
思路:通过http判断网络通断,通过ping获取网络的状态 注意:不同平台下,调用的系统命令返回格式可能不同,跨平台使用的时候,注意调整字符串截取的值 主程序:network_testing_v0.3 ...
- 基于开发者中心DevOps流水线快速上云
导读:“DevOps”这个词现在很流行,它具体指的是什么呢?本文介绍了DevOps和开发者中心DevOps流水线,图文并茂,解答您的疑惑. 那么DevOps是什么?开发者中心<DevOps流水线 ...
- 使用.net core efcore根据数据库结构自动生成实体类
源码 github,已更新最新代码 https://github.com/leoparddne/GenEntities/ 使用的DB是mysql,所有先nuget一下mysql.data 创建t4模板 ...
- Node.js的事件处理机制
1. 为什么Node.js是单线程执行的 因为从JavaScript设计之初,JavaScript是用户与浏览器交互的,主要处理DOM: 这样决定了JavaScript是单线程执行,否则会出现问题:例 ...
- 返回通知 对方法返回的结果可以进行加工 例如请求接口后 返回的json参数可以加工成对象返回给调用者
- Django模板语言初识
一.Django框架简介 1.MVC框架 MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控 ...
- MYSQL实战-------丁奇(极客时间)学习笔记
1.基础架构:一条sql查询语句是如何执行的? mysql> select * from T where ID=10: 2.基础架构:一条sql更新语句是如何执行的? mysql> upd ...