本文主要记录了一些关于 Visual Studio 的环境变量的配置,本文使用的版本是 VS 2015.
VS 的项目结构
Visual Studio 主要由两层结构,最大的一层是 解决方案 (Solution)
,一个 解决方案
可以包含多个 项目 (Project)
。可以在一个已有的 Solution
里添加 Project
.
VS 平台选项
VS 由 Debug
和 Release
两种模式,一般在开发阶段都使用 Debug,而在最后的发布阶段使用 Release。在目标平台选项主要有 x64
和 x86
两种。模式和平台相互组合就会产生 4 种方式。可根据需要进行环境变量的配置。
项目属性配置
在某个项目上(是项目,非解决方案)右键
,属性
,选中左侧 VC++目录
,右侧会出现一些路径的配置。主要有 可执行文件目录
,包含目录
,引用目录
,库目录
等等。在安装 VS 的时候,VS 已经将一些依赖的目录命名到一些宏了(就是类似于系统的环境变量之类的变量,与 C++ 的宏不一样),因此上面这些 可执行文件目录
等都包含了一些宏,作为默认的查找路径,如果自己的项目需要额外引入其他的依赖,则需要在对应的目录里添加自己的路径。比如,C++ 中调用 Python 的项目需要 Python.h
和 python27.lib
,因此就将这两个文件所在的路径分别添加进 包含目录
和 库目录
。上面的每一个目录都是和环境变量的某个变量对应的。比如,包含目录
与 环境变量 INCLUDE
对应,库目录
与 环境变量 LIB
对应。
Note: 当选用 Debug
模式时,编译的时候会报找不到 python27_d.lib
的错,这是因为我们下载的 python 都是 Release 版本的。因此只有 python27.lib
没有 python27_d.lib
。解决方法
包含目录、附加包含目录以及库目录和附加库目录的区别
在 VS 中,右键一个 Project,可以发现有两个地方设置 Include
的相关目录:
VC++ Directories -> Include Directories
C/C++ -> General -> Additional Include Directories
同理,设置 Lib 也有两个地方
VC++ Directories -> LibraryDirectories
Linker -> General -> Additional Library Directories
应该如何设置呢?
MSDN 对这两个条目的解释如下
“VC++ Directories -> Include Directories” : Directory settings displayed in the window are the directories that Visual Studio will search for include files referred to in your source code files. Corresponds to environment variable INCLUDE.
“C/C+±> General -> Additional Include Directories”: The directory to be added to the list of directories searched for include files.
编译器在编译过程中查找包含目录(Include 文件)的顺序:
The compiler searches for directories in the following order:
1. Directories containing the source file.
2. Directories specified with the /I option, in the order that CL encounters them.
3. Directories specified in the INCLUDE environment variable.
其中 step2 中的 /I
是由 C/C++ -> General -> Additional Include Directories
设置的。
而 step3 中的 INCLUDE
是由 VC++ Directories -> Include Directories
设置的。
所以从这里看出,不同的设置有不同的编译链接顺序。
因此,总结出两种设置方法:
VC++ Directories -> Include Directories 配合 VC++ Directories -> LibraryDirectories
C/C++ -> General -> Additional Include Directories 配合 Linker -> General -> Additional Library Directories
但是要注意,由于编译顺序,这种用法情况下需要确保在 VC++ Directories -> Include Directories
中填入 $(IncludePath)
(继承其他 Include 路径).
Lib 的设置与 Include 同理。
参考文章
visual studio配置中包含目录和附加包含目录的区别以及auto-linking
VS属性配置和auto-linking