在不同于依赖DLL的文件夹中输出已编译目标的正确方法是什么
What is the correct way to output compiled target in a different folder than dependencies DLLs?
我有一个Visual Studio解决方案文件,其中包含一些项目(主要是C++),
大多数项目都是以非常标准的方式配置的,Output目录设置为"bin"目录
其中一些需要将其主要输出目标输出到"bin"的子目录(即"bin\others"),但其所有DLL依赖项(作为NuGet包管理)仍复制到"bin"目录
(依赖项DLL必须在\bin中,因为"其他"项目是在运行时由\bin中的EXE加载的DLL,因此必须在EXE路径中找到依赖项)
输出路径结构如下所示:
bin (main EXE and ALL dependencies DLLs)
binothers (others projects, with their dependencies DLL in bin)
到目前为止我尝试过的:
为"其他"项目更改$(OutDir),但这不起作用,因为所有NuGet依赖项也将复制到同一输出目录。
将$(OutDir)保留为\bin,但将"others"项目TargetName更改为"others\$(ProjectName)",但这会在从clean(即在自动生成中)重新生成时导致错误,因为MSBuild(实际上是Microsoft.CppClean.targets文件默认包含在VC++项目中)尝试写入不存在的"$(IntDir)$(TargetName).Build.CppClean.log"(因为尚未创建"$(IntDir)\others\"目录)。
我希望避免生成后操作,因为类似cmd的命令在通过MSBuild进行并行自动生成时存在问题,并且必须手动维护项目中的MSBuild任务(VSIDE不支持它们,AFAIK)。
关于如何解决这个问题,有什么想法或建议吗?
默认dll搜索路径包括path环境变量中列出的目录(MSDN:桌面应用程序的标准搜索顺序)。
您可以考虑在调试环境"配置属性->调试->环境"中为path变量添加所需的路径。类似于:"PATH=$PATH;$(SolutionDir)\bin\others"。
- LLVM 编译:目标的配方 '../lib/IR/Release+Asserts/Intrinsics.gen.tmp' failed
- 编译为目标 wasm 时未定义的符号
- 如何为在 x86 主机上为 arm 目标交叉编译的项目安装依赖项
- CMake:如何清除目标编译选项
- CMake:替换接口目标的编译标志
- 在单个makefile目标中同时编译C和CPP源
- 用MacOS主机上的Windows目标交叉编译Golang
- 是否可以在编译后创建 CMake 目标和文件目录?
- 在没有节点GYP的目标平台上编译C/C 文件
- 从源代码编译 openCV:*** 未指定目标,也未找到生成文件.停
- C++多个目标文件中的模板和编译
- 在不同于依赖DLL的文件夹中输出已编译目标的正确方法是什么
- 外部"C"已编译目标代码中的函数
- 在目标平台上编译 Boost 自己是否有意义
- RInside 编译:制定目标
- 编译Cyanoboot:没有规则来实现目标
- 目标C++不编译
- 使用Iibjson尝试,catch在目标交叉编译的linux板中不起作用
- 编译错误 - 必须定义目标体系结构
- 为什么在构建依赖库之前没有开始编译目标可执行文件?