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

CMake报错:Debug配置下导入目标fmt::fmt未设置IMPORTED_LOCATION

解决CMake中fmt::fmt Debug配置IMPORTED_LOCATION未设置的错误

问题详情

编译时遇到CMake错误:

[cmake] CMake Error in CMakeLists.txt:
[cmake] IMPORTED_LOCATION not set for imported target "fmt::fmt" configuration
[cmake] "Debug".

已通过以下命令安装fmtlib:

$ sudo cmake --install . --config Debug
-- Installing: /usr/local/lib/libfmt.so.9.1.1
-- Installing: /usr/local/lib/libfmt.so.9
-- Installing: /usr/local/lib/libfmt.so
-- Installing: /usr/local/include/fmt/args.h
-- Installing: /usr/local/include/fmt/chrono.h
-- Installing: /usr/local/include/fmt/color.h
-- Installing: /usr/local/include/fmt/compile.h
-- Installing: /usr/local/include/fmt/core.h
-- Installing: /usr/local/include/fmt/format.h
-- Installing: /usr/local/include/fmt/format-inl.h
-- Installing: /usr/local/include/fmt/os.h
-- Installing: /usr/local/include/fmt/ostream.h
-- Installing: /usr/local/include/fmt/printf.h
-- Installing: /usr/local/include/fmt/ranges.h
-- Installing: /usr/local/include/fmt/std.h
-- Installing: /usr/local/include/fmt/xchar.h
-- Installing: /usr/local/lib/cmake/fmt/fmt-config.cmake
-- Installing: /usr/local/lib/cmake/fmt/fmt-config-version.cmake
-- Installing: /usr/local/lib/cmake/fmt/fmt-targets.cmake
-- Installing: /usr/local/lib/pkgconfig/fmt.pc

当前CMakeLists.txt内容:

cmake_minimum_required (VERSION 3.20)
project (Test)
set(CMAKE_CXX_STANDARD 23)
add_executable(main main.cpp)
find_package(fmt)
target_link_libraries(main fmt::fmt)

问题原因

在类Unix系统(如Linux)中,CMake默认采用单配置模式,不区分Debug/Release版本。你安装fmt时指定了--config Debug,导致生成的fmt-targets.cmake中错误地尝试为Debug配置单独设置导入路径,但实际上仅安装了单版本的库,最终引发该错误。

解决方案

方法1:修改CMakeLists.txt,修复导入目标配置

在find_package后添加逻辑,为Debug配置复用Release版本的库路径:

cmake_minimum_required (VERSION 3.20)
project (Test)
set(CMAKE_CXX_STANDARD 23)
add_executable(main main.cpp)

find_package(fmt REQUIRED)
# 针对单配置系统,为Debug配置设置导入位置
if(TARGET fmt::fmt)
  get_target_property(FMT_RELEASE_LIB fmt::fmt IMPORTED_LOCATION_RELEASE)
  if(FMT_RELEASE_LIB)
    set_target_properties(fmt::fmt PROPERTIES
      IMPORTED_LOCATION_DEBUG "${FMT_RELEASE_LIB}"
    )
  endif()
endif()

target_link_libraries(main PRIVATE fmt::fmt)

方法2:重新安装fmtlib,移除--config Debug参数

类Unix系统无需指定配置类型,直接执行:

sudo cmake --install .

默认安装的是Release版本库,CMake会自动生成正确的目标配置文件,无需区分Debug/Release。

方法3:明确指定find_package的配置

修改find_package命令,强制使用单配置的fmt:

cmake_minimum_required (VERSION 3.20)
project (Test)
set(CMAKE_CXX_STANDARD 23)
add_executable(main main.cpp)

# 指定REQUIRED确保找到fmt,可添加版本号约束
find_package(fmt 9 REQUIRED CONFIG CONFIGS fmt-config.cmake)
target_link_libraries(main PRIVATE fmt::fmt)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:55:32