我正在使用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
文件链接。如果我正确设置了子项目,这会自动生效吗?
File / Add
然后选择Add Existing Project
来添加静态库。 (据我所知,这仅在File
菜单上可用!它肯定不在右键菜单中。)其次,我点击左侧“解决方案资源管理器”侧栏中的DLL项目,然后右键单击并选择Project Dependencies...
并设置DLL项目依赖于静态库项目,该项目应首先构建。 Visual Studio似乎已经神奇地为我设置了链接依赖项,当我点击DLL项目中的F7
键时,它将构建静态库项目。
我尝试重复EXE项目的上述步骤。现在它将构建DLL,但它还没有正确链接事物;链接器抱怨从DLL导出的函数不可用。
答案 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会有这个怪癖。