假设此解决方案有应用程序项目A,动态链接库项目B,静态链接库项目C,其中项目A依赖项目B和项目C,则构建解决方案项目结构如下图所示:

解决方案架构图 解决方案结构_解决方案架构图


而目录结构则如下图所示:

解决方案架构图 解决方案结构_项目结构_02


Bin:存放所有动态链接库和可执行程序,分Debug和Release两个版本

A:应用程序项目文件夹

B:动态链接库项目文件夹

C:静态链接库项目文件夹

Doc:存放项目文档

Include:存放引用库的头文件

Lib:存放动态链接库的导入库、静态链接库

Temp:存放临时生成文件,其中Compile存放编译时的中间文件,Link存放链接时的输出文件

除了Doc需要自己建立外,其他文件夹无需手动建立。项目结构创建步骤:

1.创建一个新应用程序项目,名称A,解决方案名称为Work,如下图所示:


2.在"解决方案资源管理器"右键"解决方案Work","添加"→"新建项目"→"Win32"→"Win32 项目",名称为B,在"应用程序设置"选择"DLL"和"空项目";

3.同样的方式添加一个"Win32项目",名称为C,在"应用程序设置"选择"静态库",去掉"预编译头"选项;

4.项目结构如下图所示:

项目属性设置

配置项目A的属性

1.配置"所有配置","常规",

输出目录:$(SolutionDir)Temp\Link\$(ProjectName)\$(ConfigurationName)
中间目录:$(SolutionDir)Temp\Compile\$(ProjectName)\$(ConfigurationName)


2."生成事件"→"生成后事件",

命令行:echo D | xcopy
"$(TargetPath)" "$(SolutionDir)Bin\$(ConfigurationName)"
/y

3."C/C++"→"常规",

附加包含目录:$(SolutionDir)Include

4."链接器"→"常规",

附加库目录:$(SolutionDir)Lib

5."调试",

命令:$(SolutionDir)Bin\$(ConfigurationName)\$(TargetFileName)
工作目录:$(SolutionDir)Bin\$(ConfigurationName)

配置项目B的属性

1.配置"所有配置","常规"下,

输出目录:$(SolutionDir)Temp\Link\$(ProjectName)\$(ConfigurationName)
中间目录:$(SolutionDir)Temp\Compile\$(ProjectName)\$(ConfigurationName)

2.配置"Debug","链接器"→"常规"下,

输出文件:$(SolutionDir)Temp\Link\$(ProjectName)\$(ConfigurationName)\$(ProjectName)d.dll

3.配置"所有配置","生成事件"→"生成后事件"下,

命令行:

echo D | xcopy "$(TargetPath)"
"$(SolutionDir)Bin\$(ConfigurationName)" /y
echo D | xcopy
"$(TargetDir)$(TargetName).lib" "$(SolutionDir)Lib"
/y
echo D | xcopy "$(ProjectDir)B.h"
"$(SolutionDir)Include" /y

第三行为xcopy动态库的头文件,实际要根据所需进行改动名称。


配置项目C的属性

1.配置"所有配置","常规"下,

输出目录:$(SolutionDir)Temp\Link\$(ProjectName)\$(ConfigurationName)
中间目录:$(SolutionDir)Temp\Compile\$(ProjectName)\$(ConfigurationName)

2.配置"Debug","管理员"→"常规"下,

输出文件:$(SolutionDir)Temp\Link\$(ProjectName)\$(ConfigurationName)\$(ProjectName)d.lib

3.配置"所有配置","生成事件"→"生成后事件"下,

命令行:

echo D | xcopy "$(TargetPath)"
"$(SolutionDir)Lib" /y
echo D | xcopy "$(ProjectDir)C.h"
"$(SolutionDir)Include" /y

第二行为xcopy静态库的头文件,实际要根据所需进行改动名称。


最后设置项目生成顺序

菜单栏→"项目"→"项目依赖项",项目A依赖于B和C,如下图所示:


编译生成,可看到如下结果:


用tree命令看下文件夹结构:

集合上面所说的设置方法:自己的项目结构很简单,只需改改以下便可

常规——输出:$ProjectDir
   
   ——中间:.\Debug\
连接——常规——输出文件:$(LocalDebuggerDir)$(TargetFileName)