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
相关产品推荐
相关产品推荐

