1、项目开发环境:VS2008,QT4.7
2、项目的目录:
1)PETCT是解决方案名字
2)Bin目录存放所有动态链接库和执行档,包括自己的产出和第三方库,区分Release和Debug两个版本。另外,程序运行过程中需要外部的数据文件和启动时需要的配置文件等等都可放于该目录
3)ConsoleSubsytem是应用项目目录
4)Include用于存放第三方库的头文件
5)Lib目录用于存放导入库或者静态库(包括第三方库和自己的项目)
6)Temp用于存放临时生成文件,其中Compile存放编译器编译时生成的obj文件,Link存放链接器的输出文件。
7)TestDll是动态链接库项目目录,该项目会生成相关的Dll文件和Lib导入库文件
上面目录结构清晰,一面了然,当我们的程序需要制作安装包或者要打包源码
发布的时候,它能够使得我们生活变得更容易^_^
制作安装包时我们只需将“/PETCT/Bin/Release/”目录下的所有文件打包。
发布和转移源码的时候我们可以打包除了Temp目录以外“/GMA/”下面的所有文件和目录(如果不需要执行档,也可不包括Bin)。
我们的需求是明确的,可是VC 2008并不会自动为我们做好上面所有的事情。不过我们并不需要编写复杂的编译脚本(makefile),只需要简单的修改项目的缺省设置即可。
我们需要VC为我们做的事情包括:
1)使用“/PETCT/Temp/Compile/”作为项目编译时使用的中间目录
2)使用“/PETCT/Temp/Link/”作为项目链接的输出目录
3)当项目是应用程序时,在构建结束后拷贝执行文件到“/PETCT/Bin/Release/”或“/PETCT/Bin/Debug/”,当项目是动态链接库时,除了拷贝dll到Bin,还拷贝导入库到“/PETCT/Lib/”
4)当项目是应用程序时,调试时运行“/PETCTBin/Debug/”或“/PETCT/Bin/Release/”下面的执行文件,并以“/PETCTBin/Debug/”或“/PETCT/Bin/Release/”为工作目录
首先看一下项目设置中可以使用的宏,常用的有:
ConfigurationName | 配置名字,通常是Debug或者Release |
IntDir | 编译器使用的中间目录,产出obj文件 |
OutDir | 链接器使用的输出目录 |
ProjectDir | 项目目录 |
ProjectName | 项目名字 |
SolutionDir | 解决方案目录 |
TargetDir | 目标输出文件所在的目录 |
TargetExt | 目标输出的扩展名 |
TargetFileName | 目标输出文件名,包括扩展名 |
TargetName | 目标输出名,不包括扩展名 |
TargetPath | 目标输出文件的全路径名 |
3、详细配置过程
首先设置DLL项目TestDll
1)使用“/PETCT/Temp/Compile/”作为项目编译时使用的中间目录
2)使用“/PETCT/Temp/Link/”作为项目链接的输出目录
注意高亮的部分,首先将配置改成All Configuration(全部配置),这样可以让我们同时修改Debug和Release的部分;
Output Directory(输出目录,链接器)栏位填入:
$(SolutionDir)Temp\Link\$(ProjectName)\$(ConfigurationName)
Intermediate Directory(中间目录,编译器)栏位填入:
$(SolutionDir)\Temp\Compile\$(ProjectName)\$(ConfigurationName)
步骤1),步骤2),见下图。
3)构建结束后拷贝动态链接库到“/GMA/Bin/Release/”或“/GMA/Bin/Debug/”,拷贝导入库到“/GMA/Lib/”
我们通常都会在Debug版本的输出库后面加上字母“d”以表示这是Debug版本,在Debug配置下,修改Import Library栏位,见下图
VC可以让我们设置构建前后执行的脚本程序,所以为了完成3,我们需要写构建后执行的脚本:
在Command Line中填入,Debug配置下:
echo D | xcopy "$(TargetPath)" "$(SolutionDir)Bin\$(ConfigurationName)" /y
echo D | xcopy "$(TargetDir)$(TargetName)d.lib" "$(SolutionDir)Lib" /y
Release配置下:
echo D | xcopy "$(TargetPath)" "$(SolutionDir)Bin\$(ConfigurationName)" /y
echo D | xcopy "$(TargetDir)$(TargetName).lib" "$(SolutionDir)Lib" /y
之所以要分别设置是因为VC没有表示导入库的宏名字 -_-P
OK,到此为止,你就可以编译TestDll项目试试是不是一切正常了,不过请确认拷贝的目标目录事先建立好。
然后我们设置应用项目ConsoleSubsytem
1)使用“/PETCT/Temp/Compile/”作为项目编译时使用的中间目录
2)使用“/ PETCT /Temp/Link/”作为项目链接的输出目录
首先将配置改成All Configuration(全部配置),这样可以让我们同时修改Debug和Release的部分;
Output Directory(输出目录,链接器)栏位填入:
$(SolutionDir)\Temp\Link\$(ProjectName)\$(ConfigurationName)
Intermediate Directory(中间目录,编译器)栏位填入:
$(SolutionDir)\Temp\Compile\$(ProjectName)\$(ConfigurationName)
见下图
3)构建结束后拷贝执行文件到“/ConsoleSubsytem/Bin/Release/”或“/ConsoleSubsytem/Bin/Debug/”
在Command Line中填入,All配置下:
echo D | xcopy "$(TargetPath)" "$(SolutionDir)Bin\$(ConfigurationName)" /y
见下图
4)调试时运行“/PETCT/Bin/Debug/”或“/PETCT/Bin/Release/”下面的执行文件,并以“/PETCT/Bin/Debug/”或“/PETCT/Bin/Release/”为工作目录。见下图
Debugging下,所有配置模式:
Command栏位填入:$(SolutionDir)Bin\$(ConfigurationName)\$(TargetFileName)
Working Directory栏位填入:$(SolutionDir)Bin\$(ConfigurationName)
这样就大功告成了,现在你就可以编译该执行程序并进行调试。
我稍微总结了一下网络上的关于VC项目文件目录的配置,主要结合自己现在项目要用的Qt。
网上值得推介的两篇文章有:
1、 Visual C++ 设置适合自己的解决方案目录结构
这篇新写的,也改正了网上出现的bug命令。很适合作参考来配置项目。
2、VC 2005 解决方案的目录结构设置和管理
这个写的比较细,适合弄懂这样配置的原因