将dll与c ++项目中的其他输出文件分开
Separate dll from other output files in c++ projects
我在一个解决方案中有几个 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...直到我不得不重建并得到
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 文件。
除了使用 post 构建脚本,有没有办法分离输出文件?
我是否应该保留原来的设置并忽略上面的警告?
注意:我并不是要分离 Platform/configuration 输出文件...这是使用默认输出目录自动完成的。
我需要的是,对于每个平台,只将 DLL 文件放在一个文件夹中,远离其他任何文件。重定向链接器输出(并将项目输出保留为标准)实现了这一点——我只是不确定它是否正确。从逻辑上讲,我不应该有任何构建问题,因为我为链接器提供了它需要的所有信息...
标准方法是保持 所有 这些属性不变(从父级继承)。在这种情况下,linker 将在 $(Output)
目录中创建 DLL 和 LIB,默认情况下是 $(SolutionDir)$(Configuration)
。
您只需为 x64 配置指定名称,所有输出文件将自动分离。
link 导入库的标准(也是最简单)方法是在 Common Properties / References
页面中添加对相应项目的引用。不需要其他任何东西。
如果出于任何原因不可能,请将 $(SolutionDir)$(Configuration)
添加到 Configuration Properties / VC++ Directories / Library Directories
并将要 link 编辑的库添加到 Linker / Additional Dependencies
。如果您的解决方案中有很多项目,您可以为解决方案创建 属性 Sheet 并仅指定一次 Library Directories
。
我在一个解决方案中有几个 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...直到我不得不重建并得到
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 文件。
除了使用 post 构建脚本,有没有办法分离输出文件?
我是否应该保留原来的设置并忽略上面的警告?
注意:我并不是要分离 Platform/configuration 输出文件...这是使用默认输出目录自动完成的。
我需要的是,对于每个平台,只将 DLL 文件放在一个文件夹中,远离其他任何文件。重定向链接器输出(并将项目输出保留为标准)实现了这一点——我只是不确定它是否正确。从逻辑上讲,我不应该有任何构建问题,因为我为链接器提供了它需要的所有信息...
标准方法是保持 所有 这些属性不变(从父级继承)。在这种情况下,linker 将在 $(Output)
目录中创建 DLL 和 LIB,默认情况下是 $(SolutionDir)$(Configuration)
。
您只需为 x64 配置指定名称,所有输出文件将自动分离。
link 导入库的标准(也是最简单)方法是在 Common Properties / References
页面中添加对相应项目的引用。不需要其他任何东西。
如果出于任何原因不可能,请将 $(SolutionDir)$(Configuration)
添加到 Configuration Properties / VC++ Directories / Library Directories
并将要 link 编辑的库添加到 Linker / Additional Dependencies
。如果您的解决方案中有很多项目,您可以为解决方案创建 属性 Sheet 并仅指定一次 Library Directories
。