3

我正在使用 Visual Studio 2010 在 C 中开发 Windows 代码。

我正在处理几个相关的项目:一个静态库、一个 DLL 和一个可执行文件。DLL 应该有链接的静态库,并且可执行文件依赖于 DLL。(我使用的是“隐式”DLL 链接;我不需要控制 DLL 加载和卸载。)

现在我有三个独立的 VS2010 项目,但我知道可以将其设置为“子项目”:静态库应该是 DLL 的子项目,DLL 应该是 EXE 的子项目。

我想解决以下问题:

  • 当我重建 EXE 时,如果需要,它应该重建 DLL,如果需要,DLL 构建应该重建静态库。我只想打开 EXE,按一下F7键,然后一切都建立起来。

  • 当我将 EXE 重建为 Debug 时,它应该与.libDLL 中的 Debug 文件链接;同样,当我将 EXE 重建为 Release 时,它​​应该与.libDLL 中的 Release 文件链接。如果我正确设置子项目,这会自动工作吗?

编辑:我取得了进展。首先,在DLL项目中,我使用File / Add了然后选择Add Existing Project添加静态库。(据我所知,这仅在File菜单上可用!绝对不在右键菜单中。)其次,我单击左侧“解决方案资源管理器”侧栏中的DLL项目,然后右键单击并选择Project Dependencies...并设置DLL项目依赖于首先构建的静态库项目。然后Visual Studio好像神奇的为我设置了链接依赖,当我F7在DLL项目中敲键时,它会构建静态库项目。

我尝试对 EXE 项目重复上述步骤。现在它将构建 DLL,但它还没有正确链接;链接器抱怨从 DLL 导出的函数不可用。

4

2 回答 2

1

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

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

于 2012-07-12T22:20:20.180 回答
0

我有它的工作。以下是我用来使其工作的步骤:

  • 选择File / Add / Existing Project...并导航到您希望作为子项目的其他项目。选择.vcxproj文件并确定对话框。您刚刚添加了一个项目作为子项目。

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

  • 右键单击左侧“解决方案资源管理器”侧边栏窗格中的主项目,然后选择References... 在引用对话框中,单击Add New Reference...按钮。让主项目引用子项目就好了。您现在已经进行了设置,以便链接器将链接子项目的输出文件。

我执行上述步骤使DLL项目具有静态库项目作为子项目,我再次执行这些步骤使EXE项目具有DLL项目作为子项目。但是我得到了关于找不到静态库文件的构建错误。所以我认为,即使我将静态库设置为 DLL 库的子项目,也必须在 EXE 项目中设置该依赖项;依赖项似乎不是传递的!我执行了上述步骤以明确静态库是EXE项目的DLL子项目的子项目,并且修复了一些东西。

现在,当我按下F7键时,一切都建立起来了。如果我选择Build / Clean Solution它会清理所有三个项目。当它链接时,它会根据需要获取 Debug 或 Release 库文件并将它们链接进去。

有时候我打F7构建,构建失败,说依赖库过时了;但是如果我F7再次点击,那么 Visual Studio 会重建依赖库并且构建成功。如果我Ctrl+Alt+F7强制执行干净的构建,则每次构建都会成功。我不知道为什么 Visual Studio 有这个怪癖。

于 2012-07-12T23:54:09.333 回答