在Microsoft Visual Studio 2010中设置子项目

时间:2012-07-12 21:57:02

标签: c visual-studio-2010 build-process

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

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

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

我想解决以下问题:

  • 当我重建EXE时,如果需要,它应该重建DLL,反过来,如果需要,DLL构建应该重建静态库。我想打开EXE,点击F7键,一切都会建立起来。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

  • 选择File / Add / Existing Project...并导航到您想要作为子项目的其他项目。选择.vcxproj文件,然后选择对话框。您刚刚将项目添加为子项目。

  • 右键单击左侧“解决方案资源管理器”侧栏窗格中的主项目,然后选择Project Dependencies...单击子项目使其成为主项目的依赖项,然后单击对话框。这是一个选项卡式对话框,另一个选项卡是“Build Order”;如果单击它,可以确保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会有这个怪癖。