【问题标题】:Separate dll from other output files in c++ projects将 dll 与 c++ 项目中的其他输出文件分开
【发布时间】:2015-02-19 04:48:41
【问题描述】:

我在一个解决方案中有几个 dll 项目(有些相互依赖)

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

一切正常。

项目是 Win7Debug Win32、Win7Debug x64..... 以及只有 Debug 和 Release 配置的 Win32 项目。

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

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

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

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

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

(以匹配链接器输出)但现在我当然会在与 dll 相同的文件夹中获取 lib 和 exp 文件。

除了使用后期构建脚本之外,有没有办法分离输出文件?

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

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

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

【问题讨论】:

  • 我接受了下面的答案,因为 - 虽然从 dll 中分离 lib 似乎没有任何副作用 - 使用 Visual Studio 提供的默认值似乎更好,依赖项明显旁边需要的dll。并让下游应用过滤输入。

标签: c++ windows dll


【解决方案1】:

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

链接导入库的标准(也是最简单)的方法是在Common Properties / References页面中添加对相应项目的引用。没有其他要求。

如果由于某种原因不可能,请将$(SolutionDir)$(Configuration) 添加到Configuration Properties / VC++ Directories / Library Directories 并添加要链接到Linker / Additional Dependencies 的库。如果您的解决方案中有很多项目,您可以为解决方案创建属性表并指定一次Library Directories

【讨论】:

  • 谢谢,链接库没问题。我可以按照我的描述进行链接,也可以将依赖项添加为引用。我要做的是只将 DLL 文件放入特定文件夹中(重命名项目配置是个好主意,谢谢),没有 lib 文件。
  • 你确定,你真的需要这个吗?这将需要额外的努力。
  • 无论如何,我建议为解决方案创建一个属性表并在其中指定通用设置,而不是在每个项目中覆盖它们。
  • 关于制作公共属性表的要点非常好......是的,我真的需要这个 - 我的需求是由其他人的愿望决定的。尽管该警告很可怕,但到目前为止,我似乎可以为项目保留不同的 dll 和 lib 输出目录,而不会产生不利影响
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 2017-05-04
相关资源
最近更新 更多