如何在CLion中为C++项目构建Release版本并解决DLL查找问题
解决CLion中CMake项目的Release版本构建与DLL依赖问题
一、在CLion中创建Release构建配置
- 点击右上角运行配置下拉菜单(当前显示为Debug),选择「Edit Configurations...」
- 在配置窗口左上角点击「+」,选择「CMake Application」
- 在新配置的「Build configuration」下拉列表中选择「Release」,其余参数CLion会自动识别,直接保存即可。
二、修改CMakeLists.txt,自动复制DLL到可执行文件目录
在原CMake代码的add_dependencies(${PROJECT_NAME} copy_assets)之后,添加以下代码,自动将所需DLL复制到构建输出目录:
# 定义需要复制的DLL路径 set(REQUIRED_DLLS I:/onedrive/SDL2/lib/x64/SDL2.dll I:/onedrive/SDL2/lib/x64/SDL2_ttf.dll I:/onedrive/SDL2/lib/x64/SDL2_image.dll I:/onedrive/SDL2/lib/x64/SDL2_mixer.dll I:/onedrive/lua4/lua54.dll ) # 编译完成后自动复制DLL到可执行文件所在目录 add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${REQUIRED_DLLS} $<TARGET_FILE_DIR:${PROJECT_NAME}> )
可选优化:区分Debug/Release版本的DLL
如果你的SDL库提供了Debug版本(文件名带d后缀,如SDL2d.dll),可以用CMake的配置变量自动适配:
set(SDL_DLL_BASE_DIR I:/onedrive/SDL2/lib/x64) set(REQUIRED_DLLS ${SDL_DLL_BASE_DIR}/SDL2$<$<CONFIG:Debug>:d>.dll ${SDL_DLL_BASE_DIR}/SDL2_ttf$<$<CONFIG:Debug>:d>.dll ${SDL_DLL_BASE_DIR}/SDL2_image$<$<CONFIG:Debug>:d>.dll ${SDL_DLL_BASE_DIR}/SDL2_mixer$<$<CONFIG:Debug>:d>.dll I:/onedrive/lua4/lua54.dll ) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different ${REQUIRED_DLLS} $<TARGET_FILE_DIR:${PROJECT_NAME}> )
三、构建并运行Release版本
- 点击CLion菜单栏「Build」->「Clean Project」,清理旧构建文件
- 选择刚才创建的Release配置,点击构建或运行按钮,CLion会自动编译Release版本,并将DLL、assets复制到
cmake-build-release目录下的可执行文件同路径中,此时程序可直接运行。
额外建议
将原CMake中的全局包含目录和链接目录改为目标专属设置,更符合现代CMake规范:
# 替换原有的include_directories和link_directories target_include_directories(${PROJECT_NAME} PRIVATE I:/onedrive/SDL2/include libs) target_link_directories(${PROJECT_NAME} PRIVATE I:/onedrive/SDL2/lib/x64 libs)
内容的提问来源于stack exchange,提问作者Oli
相关产品推荐
相关产品推荐

