将dll与c ++项目中的其他输出文件分开

时间:2015-02-18 16:07:24

标签: c++ windows dll

我在解决方案中有一些dll项目(一些依赖于彼此)

Project1 -> Properties -> Linker -> Input -> Additional Dependencies -> Project2.lib
Project1 -> Properties -> Linker -> General -> Additional Library Directories -> $(OutDir)

一切正常。

项目是Win7Debug Win32,Win7Debug x64 .....以及只有调试和发布配置的Win32项目。

我想将Win32的所有dll放在一个文件夹中,将x64放在另一个文件夹中。所以我为Win32项目添加了x64配置,并更改了

Project1 -> Properties -> Linker -> General -> Output File -> $(SolutionDir)/i386/$(TargetName)/$(TargetExt)

(对于Win32 - x64的类似更改)

一切似乎都很好 - 我只收到了i386文件夹中的dll ......直到我不得不重建并获得

Warning 23  warning MSB8012: 
TargetPath(C:\Path\Win7Debug\Project1.dll) does not match the Linker's OutputFile 
property value (C:\Path\i386\Project1.dll). This may cause your project to build 
incorrectly. To correct this, please make sure that $(OutDir), $(TargetName) and 
$(TargetExt) property values match the value specified in %(Link.OutputFile).   

这看起来很严重......而且我不想在缺少依赖项方面遇到问题(虽然一切似乎都运行正常 - 而不仅仅是在我的机器上)

我改变了

 Project1 -> Properties -> Configuration Properties -> General -> OutputDirectory -> $(SolutionDir)/i386

(为了匹配链接器输出)但是现在当然我将lib和exp文件放在与dll相同的文件夹中。

除了使用post build脚本之外,有没有办法分隔输出文件?

我是否应该将设置保留下来并忽略上面的警告?

注意:我不是要分离平台/配置输出文件......这是使用默认输出目录自动完成的。

对于每个平台,我需要的是,只将DLL文件放在一个文件夹中,远离其他任何文件夹。重定向链接器输出(并将项目输出保持为标准)实现了 - 我只是不确定它是否正确。逻辑上我不应该有任何构建问题,因为我给链接器提供了它需要的所有信息......

1 个答案:

答案 0 :(得分:1)

标准方法是保持所有这些属性不变(从父级继承)。在这种情况下,链接器将在$(Output)目录中创建DLL和LIB,默认情况下为$(SolutionDir)$(Configuration)。 您只需指定x64配置的名称,所有输出文件将自动分开。

链接导入库的标准(和最简单)方法是在Common Properties / References页面中添加对相应项目的引用。不需要其他任何东西。

如果出于任何原因,无法将$(SolutionDir)$(Configuration)添加到Configuration Properties / VC++ Directories / Library Directories并添加要链接到Linker / Additional Dependencies的库。如果您的解决方案中有许多项目,您可以为解决方案创建属性表并仅指定Library Directories一次。