如何在Visual Studio中设置DLL查找路径并按指定结构存储编译产物
解决方案
问题1:配置Visual Studio识别多目录DLL文件
你之前配置不生效是因为没有正确添加多路径分隔,按以下步骤操作即可:
- 右键项目打开「属性」面板,顶部先选择你要配置的目标平台(x86/x64)和编译配置(Debug/Release),避免后续配置不匹配不生效
- 左侧菜单选择「配置属性 > 调试」,找到右侧「环境」配置项,填入以下内容:
PATH=$(ProjectDir)SDL\SDL_2\lib\$(Platform);$(ProjectDir)SDL\SDL2_image\lib\$(Platform);%PATH% - 多个路径用英文分号
;分隔,末尾加%PATH%是为了继承系统原有环境变量,避免其他依赖加载失败 - 如果还需要识别对应目录下的
.lib静态库文件,可同时在「配置属性 > VC++目录 > 库目录」中添加上述两个SDL库路径,再在「配置属性 > 链接器 > 输入 > 附加依赖项」中填入对应的SDL库文件名即可
问题2:按目录结构存储编译产物
完全可以实现,你之前运行失败是因为DLL没有放在可执行文件的同目录,修改生成后事件逻辑即可:
- 先统一配置产物输出路径:打开项目属性面板,在「配置属性 > 常规」中修改:
- 输出目录:建议设置为
$(SolutionDir)bin\$(Platform)\$(Configuration)\,所有可执行文件会统一输出到项目根目录的bin文件夹下,按平台和编译配置分类 - 中间目录:建议设置为
$(SolutionDir)intermediate\$(Platform)\$(Configuration)\,编译临时文件会单独存放,方便清理
- 输出目录:建议设置为
- 配置生成后自动拷贝DLL:左侧菜单选择「配置属性 > 生成事件 > 生成后事件」,在「命令行」中填入以下内容:
xcopy /y /d "$(ProjectDir)SDL\SDL_2\lib\$(Platform)\*.dll" "$(OutDir)" xcopy /y /d "$(ProjectDir)SDL\SDL2_image\lib\$(Platform)\*.dll" "$(OutDir)"
- 参数
/y表示覆盖同名文件不弹出提示,/d表示仅拷贝修改时间更新的文件,减少重复拷贝耗时 - 完成配置后重新编译,所有DLL会自动拷贝到exe所在的输出目录,运行时可以正常加载。如果你确实需要保留原有SDL目录结构存放DLL,可在代码入口处调用
SetDllDirectory()接口添加对应DLL目录到搜索路径即可,无需改动拷贝逻辑。
内容的提问来源于stack exchange,提问作者l000p
相关产品推荐
相关产品推荐

