工程结构
工程设置
(注意:如何发现设置正确,却一直报找不到错误,就需要注意Debug/release *x86/x64 组合的工程是独立设置的,设置的时候一定要看清楚你的工程是什么组合)
设置exe输出目录、debug目录、生成的exe名称
右击工程-->属性
请用$(SolutionDir) 这个宏,这样便于项目目录迁移,关于各种宏的说明见本文相关章节
配置include文件夹路径
配置库文件依赖(我这里是依赖静态库lib)
配置库文件所在目录
配置依赖的库文件
包含目录、库目录、附加包含目录、附加库目录、附加依赖项
VS项目中的包含目录、库目录、附加包含目录、附加库目录、附加依赖项均在"项目->属性->配置属性"下进行配置,具体说明如下:
VC++目录:
包含目录:寻找#include<xxxx.h>中的xxxx.h的搜索目录
库目录:寻找.lib文件的搜索目录
C/C++:
常规->附加包含目录:寻找#include<xxxx.h>中的xxxx.h的搜索目录(每一项对应一个文件夹XXXX,文件夹中包含了编译时所需的头文件,使用时直接#include<XXXX>即可)
链接器:
常规->附加库目录:寻找.lib文件的搜索目录
输入->附加依赖项:lib库(C++的库会把函数、类的声明放在*.h中,实现放在*.cpp或*.cc中。编译之后,*.cpp,*.cc,*.c会被打包成一个.lib文件,这样可以保护源代码)
常见问题:
1.包含目录和附加包含目录(库目录和附加库目录)的区别:
包含目录:修改了系统的include宏的值,是全局的;
附加包含目录:用于当前项目,对其他项目没有影响。
(库目录和附加库目录的区别同上)
2.可知包含目录和附加包含目录(库目录和附加库目录)的区别主要在于全局还是当前,那么当需要对某工程添加这些目录时,通常情况下,都是在附加包含目录和附加库目录中添加的。
3. 要使用一个库,除了要include其头文件以外(附加包含目录),还要在链接过程中把lib加进去(附加库目录、附加依赖项)。
4.添加方法:
附加包含目录---添加工程的头文件目录:
项目->属性->配置属性->C/C++->常规->附加包含目录:加上头文件的存放目录;
附加库目录---添加文件引用的lib静态库路径:
项目->属性->配置属性->链接器->常规->附加库目录:加上lib文件的存放目录;
附加依赖项---添加工程引用的lib文件名:
项目->属性->配置属性->链接器->输入->附加依赖项:加上lib文件名。
5.当需要向项目中添加.dll动态链接库时,直接将需要添加的.dll文件拖拽到项目生成的.exe所在的文件夹下即可(项目->属性->配置属性->常规->输出目录,可以看到.exe生成在哪个目录下)。
6.在添加上述几个目录的路径的时候,可以看到$(xxxx),这就是宏了,可以点开右下角的宏查看这些分别代表什么字符串。
vs自带的宏说明
说明
在 Visual Studio 中,宏(Macros)是一组预定义的变量,用于在项目文件、构建配置和其他设置中引用各种路径和文件位置。这些宏可以帮助你在不同的环境中保持路径的一致性。
以下是一些常用的 Visual Studio 宏及其含义:
1. $(SolutionDir)
- 含义:解决方案目录的绝对路径(包含解决方案文件的目录),xxx.sln文件所在路径。
- 示例:
C:\Projects\MySolution\
2. $(ProjectDir)
- 含义:当前项目的目录的绝对路径。
- 示例:
C:\Projects\MySolution\MyProject\
3. $(TargetDir)
- 含义:输出文件的目标目录的绝对路径。
- 示例:
C:\Projects\MySolution\MyProject\Debug\
4. $(TargetFileName)
- 含义:输出文件的目标文件名(包含扩展名)。
- 示例:
MyProject.exe
5. $(TargetName)
- 含义:输出文件的目标名称(不包含扩展名)。
- 示例:
MyProject
6. $(TargetExt)
- 含义:输出文件的目标扩展名。
- 示例:
.exe
7. $(OutDir)
- 含义:输出目录的绝对路径。
- 示例:
C:\Projects\MySolution\MyProject\Debug\
8. $(Configuration)
- 含义:当前的构建配置(如 Debug 或 Release)。
- 示例:
Debug
9. $(Platform)
- 含义:当前的构建平台(如 x86 或 x64)。
- 示例:
x64
10. $(ProjectName)
- 含义:当前项目的名称。
- 示例:
MyProject
11. $(SolutionName)
- 含义:当前解决方案的名称。
- 示例:
MySolution
12. $(SolutionFileName)
- 含义:当前解决方案的文件名(包含扩展名)。
- 示例:
MySolution.sln
13. $(SolutionExt)
- 含义:当前解决方案的扩展名。
- 示例:
.sln
14. $(SolutionPath)
- 含义:当前解决方案的绝对路径。
- 示例:
C:\Projects\MySolution\MySolution.sln
15. $(ProjectFileName)
- 含义:当前项目的文件名(包含扩展名)。
- 示例:
MyProject.vcxproj
16. $(ProjectExt)
- 含义:当前项目的扩展名。
- 示例:
.vcxproj
17. $(ProjectPath)
- 含义:当前项目的绝对路径。
- 示例:
C:\Projects\MySolution\MyProject\MyProject.vcxproj
18. $(IntDir)
- 含义:中间目录的绝对路径,用于存放编译过程中的中间文件。
- 示例:
C:\Projects\MySolution\MyProject\Debug\
19. $(DevEnvDir)
- 含义:Visual Studio 安装目录的绝对路径。
- 示例:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\
20. $(VSInstallDir)
- 含义:Visual Studio 的安装目录。
- 示例:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\
21. $(VCInstallDir)
- 含义:Visual C++ 的安装目录。
- 示例:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\
22. $(WindowsSDKDir)
- 含义:Windows SDK 的安装目录。
- 示例:
C:\Program Files (x86)\Windows Kits\10\
23. $(FxCopDir)
- 含义:FxCop(代码分析工具)的安装目录。
- 示例:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Team Tools\Static Analysis Tools\FxCop\
24. $(ProgramFiles)
- 含义:
Program Files
目录的绝对路径。 - 示例:
C:\Program Files\
25. $(ProgramFiles(x86))
- 含义:
Program Files (x86)
目录的绝对路径。 - 示例:
C:\Program Files (x86)\
26. $(AppData)
- 含义:当前用户的
AppData
目录的绝对路径。 - 示例:
C:\Users\Administrator\AppData\Roaming\
27. $(LocalAppData)
- 含义:当前用户的
Local AppData
目录的绝对路径。 - 示例:
C:\Users\Administrator\AppData\Local\
28. $(Temp)
- 含义:临时目录的绝对路径。
- 示例:
C:\Users\Administrator\AppData\Local\Temp\
29. $(SystemRoot)
- 含义:系统根目录(通常是
C:\Windows
)。 - 示例:
C:\Windows\
30. $(MSBuildProjectName)
- 含义:当前项目的名称。
- 示例:
MyProject
31. $(MSBuildProjectFullPath)
- 含义:当前项目的绝对路径。
- 示例:
C:\Projects\MySolution\MyProject\MyProject.vcxproj
32. $(MSBuildProjectExtension)
- 含义:当前项目的文件扩展名。
- 示例:
.vcxproj
33. $(MSBuildProjectDirectory)
- 含义:当前项目的目录的绝对路径。
- 示例:
C:\Projects\MySolution\MyProject\
34. $(MSBuildProjectFile)
- 含义:当前项目的文件名(包含扩展名)。
- 示例:
MyProject.vcxproj
35. $(MSBuildStartupDirectory)
- 含义:MSBuild 启动目录的绝对路径。
- 示例:
C:\Projects\MySolution\
这些宏可以在 Visual Studio 的属性页、构建配置、预处理器定义等地方使用,以确保路径和设置在不同的环境中保持一致。
例子
以下目录结构,应该怎么表示data的路径
Image/
├── myAlg/
│ └── myAlg.sln
└── data/
└── your_data_files
答:$(SolutionDir)..\data