CMake链接NLohmann JSON库失败(M1 Mac)如何解决?
解决M1 Mac上NLohmann JSON头文件找不到的问题
问题根源
M1 Mac的ARM64架构包管理路径与x86_64存在差异,且NLohmann JSON的CMake配置在新版本中更推荐目标式链接而非传统变量引用,你当前使用的${nlohmann_json_INCLUDE_DIR}和${nlohmann_json_LIBRARIES}在ARM架构环境下未正确识别路径。
修正步骤
1. 确保NLohmann JSON为ARM版本
M1 Mac需使用对应架构的Homebrew包,先卸载可能存在的x86版本,再安装ARM版:
arch -x86_64 brew uninstall nlohmann-json brew install nlohmann-json
2. 重构CMakeLists.txt链接逻辑
NLohmann JSON 3.10.0+提供了官方CMake目标nlohmann_json::nlohmann_json,无需手动指定include目录和库路径,直接链接目标即可:
cmake_minimum_required(VERSION 3.14) project(interpreter) find_package(nlohmann_json 3.2.0 REQUIRED) add_library(interpreter src/interpretJson.cpp ) target_include_directories(interpreter PUBLIC $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ) # 替换变量引用,直接链接官方目标 target_link_libraries(interpreter PRIVATE nlohmann_json::nlohmann_json ) set_target_properties(interpreter PROPERTIES LINKER_LANGUAGE CXX CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON ) install(TARGETS interpreter ARCHIVE DESTINATION lib )
3. 清理缓存重新构建
M1 Mac的CMake缓存可能残留x86架构路径信息,执行以下命令重置构建环境:
rm -rf build mkdir build && cd build cmake .. make
4. 备选方案:使用单头文件版本
若包管理方式仍有问题,可直接下载NLohmann JSON的单头文件json.hpp,放到项目include/nlohmann目录下,无需依赖CMake包查找,直接通过项目自身include目录即可访问头文件。
内容的提问来源于stack exchange,提问作者callum arul
相关产品推荐
相关产品推荐

