You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xubuntu下CLion中SFML加载图片失败及默认路径配置问询

解决SFML在CLion中默认加载目录指向项目根目录的问题

我刚碰到过几乎一模一样的问题,其实核心原因就是CLion默认把程序的运行工作目录设置成了编译生成的cmake-build-debug(或cmake-build-release)目录,而非你的项目根目录——所以SFML会去编译目录找图片,自然找不到存在项目根目录的资源。下面给你两种靠谱的解决方法:

方法一:直接修改CLion运行配置(最快捷)

  • 点击CLion顶部工具栏的运行配置下拉菜单(就是显示你项目名称的那个下拉框),选择「Edit Configurations...」
  • 在弹出的配置窗口中,找到你的项目对应的运行项,在「Working directory」这一栏,把默认的$CMakeCurrentBuildDir替换成$ProjectFileDir$(或者直接点击右边的文件夹图标,手动选择你的项目根目录)
  • 点击「Apply」保存配置,重新运行项目,现在你直接用t.loadFromFile("player.png")就能正常加载项目根目录下的图片了。

方法二:通过CMakeLists.txt配置(更通用,适合协作场景)

如果你的项目需要多人协作,或者希望配置能跟随代码仓库同步,可以在CMakeLists.txt里添加以下代码,强制设置程序运行时的工作目录为项目根目录:

# 替换成你的项目目标名称(就是add_executable后面的那个名字)
set_target_properties(你的项目名称 PROPERTIES
    VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
)

另外还有一个备选方案(不推荐但可以应急):把项目根目录的资源文件自动复制到编译目录。如果上面的方法暂时不生效,可以试试这个:

# 复制所有.png图片到编译目录
file(GLOB IMAGE_FILES "${CMAKE_SOURCE_DIR}/*.png")
foreach(IMAGE ${IMAGE_FILES})
    configure_file(${IMAGE} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
endforeach()

这样即使工作目录还是编译目录,SFML也能找到复制过去的图片,但这种方法会产生重复文件,不如直接修改工作目录优雅。

至于为什么之前Ubuntu上没问题?大概率是你当时在Ubuntu的CLion里已经手动调整过运行配置的工作目录,而Xubuntu上是默认的全新配置,所以才出现差异~

内容的提问来源于stack exchange,提问作者VirtualUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:49:55