使用find_package设置nlohmann::json的CMake选项无效,求解决方案
关于nlohmann::json禁用隐式转换的find_package用法问题
- 你遇到的问题本质是:
JSON_ImplicitConversions是nlohmann_json构建阶段的配置选项,而非使用阶段的选项。 - 用
fetch_content时,你是从源码重新构建库,设置的JSON_ImplicitConversions OFF会被传递到库的构建流程中,因此能生效。 - 而
find_package是查找已预编译完成的nlohmann_json包(无论是系统默认安装的,还是你之前自行编译安装的),这个包在编译时就已经确定了是否开启隐式转换,后续通过set设置的选项无法改变已编译库的配置。
可行解决办法
如果坚持使用find_package,有两种方案:
- 自行从源码编译nlohmann_json,编译时通过
-DJSON_ImplicitConversions=OFF指定选项,编译完成后安装到系统或本地路径,再用find_package查找这个自定义编译的版本。 - 使用nlohmann_json的header-only模式(库的默认推荐方式),此时无需依赖编译选项,只需在包含头文件前定义宏
JSON_USE_IMPLICIT_CONVERSIONS=0即可禁用隐式转换:#define JSON_USE_IMPLICIT_CONVERSIONS 0 #include <nlohmann/json.hpp>
内容的提问来源于stack exchange,提问作者SupAl
相关产品推荐
相关产品推荐

