2012-07-12 149 views
3

我使用Visual Studio 2010中设置子项目2010

我在几个相关项目开发工作用C Windows代码。该DLL应该有链接的静态库,并且可执行文件依赖于DLL。 (我正在使用“隐式”DLL链接;我不需要控制DLL加载和卸载)。

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

我要解决以下几点:

  • 当我重建EXE,它应该重建DLL如果需要的话,反过来的DLL构建应该重建静态库如果需要的话。我想只是打开EXE,打到F7的关键,并且一切都会建立。

  • 当我重建EXE为Debug时,它应该链接DLL中的Debug .lib文件;同样,当我将EXE重建为Release时,它应该与DLL中的发行版.lib链接。如果我正确设置了子项目,这个工作是否会自动完成?

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

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

回答

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有这个怪癖。

1

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

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

+0

小老鼠再次回答,我的赞美。 – 2012-07-12 22:25:28

+0

请告诉我:我该如何设置多个项目? 'Add - > Existing item'然后添加另一个项目的'.sln'文件,或者是什么? – steveha 2012-07-12 22:46:17

+0

第二部分:aha,这是参考文献的工作原理。由于我刚刚得到一个空白的对话框,而且帮助也没有很好地解决问题,所以我无法找出引用。对话框是空的,因为我没有任何可供参考的东西! – steveha 2012-07-12 22:47:00