Visual Studio Community下集中管理第三方dll供项目引用的方法问询
同一解决方案下SDL2 DLL集中存储的手动实现方案
以下方案均针对Visual Studio MSVC编译环境,适配同一解决方案下多项目共享依赖的需求:
方案1:配置统一输出+调试目录(最推荐)
适合不需要保留各项目独立输出目录的场景,配置一次永久生效:
- 在解决方案根目录新建统一的依赖存放文件夹,例如命名为
SharedDeps,内部拆分bin(存放SDL2相关dll)、include(存放SDL2头文件)、lib(存放SDL2导入库)三个子目录,按平台(x86/x64)、编译配置(Debug/Release)拆分下级目录存放对应版本的文件 - 选中解决方案内所有需要调用SDL2的项目,右键打开【属性】面板,顶部配置选择【所有配置】、平台选择【所有平台】
- 导航到【配置属性 > 常规】,将【输出目录】修改为统一路径:
$(SolutionDir)SharedDeps\bin\$(Platform)\$(Configuration)\,所有项目编译生成的exe会统一输出到该目录,与SDL2 dll同目录,运行时可直接读取 - 再导航到【配置属性 > 调试】,将【工作目录】修改为和上述输出目录一致的路径,保证VS调试运行时也能正常读取dll
- 后续更新SDL2版本时,直接替换
SharedDeps对应目录下的dll文件即可,所有项目自动生效
方案2:生成事件自动复制dll
如果需要保留各项目独立的输出目录,可以用自动复制逻辑避免手动操作:
- 同上先建好
SharedDeps集中依赖目录,存放所有SDL2相关文件 - 选中所有依赖SDL2的项目打开属性面板,选择【所有配置】【所有平台】
- 导航到【配置属性 > 生成事件 > 生成后事件】,在【命令行】输入框添加如下命令:
xcopy /y /d "$(SolutionDir)SharedDeps\bin\$(Platform)\$(Configuration)\*.dll" "$(OutDir)" - 将【在生成中使用】选项设置为【是】即可
- 命令参数说明:
/y代表覆盖文件不弹窗提示,/d代表仅复制比目标目录文件更新的dll,不会每次生成都重复执行复制操作。更新SDL2时只需替换SharedDeps内的dll,下次项目生成时会自动同步新dll到各项目输出目录
方案3:修改Path环境变量(仅推荐临时测试用)
如果不想修改任何项目配置,可以将SharedDeps下对应平台配置的dll目录路径,添加到Windows系统的Path环境变量中,程序运行时系统会自动从Path路径中查找dll。该方案缺点是容易出现多版本SDL2冲突,不建议开发调试阶段使用。
CMake项目补充配置
如果使用CMake管理项目,只需在顶层CMakeLists.txt中添加一行配置即可实现统一输出:set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/SharedDeps/bin/${CMAKE_SYSTEM_PROCESSOR}/${CMAKE_BUILD_TYPE})
无需单独配置每个子项目即可自动同步所有二进制文件到统一目录。
内容的提问来源于stack exchange,提问作者Thedv8ed1
相关产品推荐
相关产品推荐

