在Microsoft Visual Studio 2010中设置子项目

3
我正在使用Visual Studio 2010在C中开发Windows代码。我正在处理几个相关的项目:一个静态库,一个动态链接库(DLL)和一个可执行文件。DLL应该链接静态库,而可执行文件依赖于DLL。(我使用“隐式”DLL链接;我不需要控制DLL的加载和卸载。)目前,我有三个独立的VS2010项目,但我知道可以将它们设置为“子项目”:静态库应该是DLL的子项目,而DLL应该是可执行文件的子项目。
我想解决以下问题: 1.当我重新构建可执行文件时,如果需要,它应该重新构建DLL,反之亦然,DLL构建应该重新构建静态库。我只想打开可执行文件,按下F7键,一切都能构建。 2.当我将可执行文件重新构建为Debug时,它应该与DLL的Debug .lib文件链接;同样,当我将可执行文件重新构建为Release时,它应该与DLL的Release .lib文件链接。如果我正确设置了子项目,这会自动工作吗?
编辑:我取得了进展。首先,在DLL项目中,我使用“文件/添加”,然后选择“添加现有项目”来添加静态库。(据我所知,这仅在“文件”菜单中可用!它绝对不在右键单击菜单中。)其次,我在左侧的“解决方案资源管理器”侧边栏中单击DLL项目,然后右键单击并选择“项目依赖项...”,设置DLL项目依赖于应该首先构建的静态库项目。Visual Studio似乎神奇地为我设置了链接依赖关系,并且当我在DLL项目中按下F7键时,它将构建静态库项目。
我尝试重复上述步骤以用于EXE项目。现在它将构建DLL,但它还没有正确地链接东西;链接器抱怨从DLL导出的函数不可用。
2个回答

1

你不能真正拥有“子项目”,但可以在一个解决方案中拥有多个项目。然后,您可以通过打开“项目|项目依赖项...”菜单项来标记它们彼此之间的依赖关系。

您还可以通过让一个项目引用另一个项目(从“项目|引用...”菜单项)之间建立“更强”的依赖关系。例如,如果应用程序项目引用库项目,则该库将自动链接到应用程序。


老鼠再次回答,我向你致以赞美。 - Hans Passant
请告诉我:如何设置多个项目?是通过“添加->现有项”然后添加其他项目的.sln文件,还是其他方法? - steveha
第二部分:啊哈,这就是引用的工作原理。我一直在研究引用,因为我只得到了一个空对话框,而且帮助也没有解决问题。对话框是空的,因为我还没有要引用的东西! - steveha
看起来你使用 文件 / 添加 然后选择 现有项目 来添加子项目。请查看我在问题中添加的新文本。 - steveha

0

我已经让它工作了。以下是我用来使其工作的步骤:

  • 选择文件/添加/现有项目...,然后导航到您想要作为子项目的其他项目。选择.vcxproj文件并确认对话框。您刚刚将一个项目添加为子项目。

  • 在左侧的“解决方案资源管理器”侧边栏窗格中右键单击主项目,然后选择项目依赖项...。单击子项目以使其成为主项目的依赖项,然后确认对话框。这是一个选项卡式对话框,另一个选项卡是“生成顺序”;如果单击该选项卡,您可以确保Visual Studio首先构建子项目,然后构建主项目。现在,您已经设置好了子项目先构建,然后再构建主项目。

  • 在左侧的“解决方案资源管理器”侧边栏窗格中右键单击主项目,然后选择引用...。在引用对话框中,单击添加新引用...按钮。使主项目引用子项目并确认。现在,您已经设置好了链接器将子项目的输出文件链接起来。

我执行了上述步骤,将 DLL 项目作为子项目的静态库项目,然后再次执行这些步骤,将 DLL 项目作为 EXE 项目的子项目。但是,我遇到了关于找不到静态库文件的构建错误。所以我认为,即使我将静态库设置为 DLL 库的子项目,也必须在 EXE 项目中设置依赖关系;依赖关系似乎不具有传递性!我执行了上述步骤,以明确静态库是 EXE 项目的 DLL 子项目,并解决了问题。
现在当我按下 F7 键时,一切都会构建成功。如果我选择 Build / Clean Solution,它会清理所有三个项目。链接时,会根据需要获取 Debug 或 Release 库文件并将其链接进去。
有时当我按下 F7 并构建时,构建失败,说依赖库已过时;但是如果我再次按下 F7,Visual Studio 会重新构建依赖库,构建成功。如果我按下 Ctrl+Alt+F7 来强制进行清理构建,则每次构建都会成功。我不知道为什么 Visual Studio 会有这种怪癖。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接