gpt4 book ai didi

c++ - 如何正确配置cmake文件为nlohmann_json构建一个简单的hello world?

转载 作者:行者123 更新时间:2023-12-02 10:35:16 32 4
gpt4 key购买 nike

我正在使用以下 JSON 解析器:https://github.com/nlohmann/json

以下是我构建的步骤:

 2074  git clone https://github.com/nlohmann/json.git
2075 git branch
2076 ls
2077 cd json/
2078 git branch
2079 git pull
2080 ls
2081 vi CODE_OF_CONDUCT.md
2082 mkdir build
2083 cd build/
2084 ls
2085 cmake ..
2086 cmake --build .
2087 ctest --output-on-failure

单元测试通过。正如文档中提到的,我没有看到正在构建的库。

我正在尝试为解析器构建一个简单的 hello world 程序。这是代码:

#include <nlohmann/json.hpp>
#include<string.h>
// for convenience
using json = nlohmann::json;

int
main(int argc, char *argv[])
{
std::ifstream ifs("test.json");
json jf = json::parse(ifs);
return 0;
}

CMake 文件:

# CMakeLists.txt
cmake_minimum_required(VERSION 3.10)

# set the project name
project(my_json CXX)
find_package(nlohmann_json 3.2.0 REQUIRED)

但是,CMake 找不到包 nlohmann_json。

请建议如何构建此示例。我打算使用外部库方法来构建此代码。

最佳答案

打包方法

find_package 的默认行为是期望找到安装在您系统上的包。

如果您有一个简单的本地克隆,那么您应该在您的模块路径中提供一个 Find***.cmake 文件,该文件与模块名称相匹配。

例如,创建一个名为 Findnlohmann_json.cmake 的文件,内容如下:

if( TARGET nlohmann_json )
return()
endif()

if(NOT NLOHMANNJSON_ROOT)
set(NLOHMANNJSON_ROOT "${PROJECT_SOURCE_DIR}/lib/json")
endif()

add_library( nlohmann_json INTERFACE )
target_include_directories(
nlohmann_json
INTERFACE
${NLOHMANNJSON_ROOT}/include
)

参见 https://cmake.org/cmake/help/latest/command/find_package.html#search-procedure了解更多信息。

本地来源方法

也就是说,如果您将库保存在源代码树中,您可能会发现从项目的 CMakeLists.txt 中简单地调用 add_subdirectory 会更容易:

project(my_json CXX)
add_subdirectory( lib/nlohmann_json )

//...
target_link_libraries( myApp PRIVATE nlohmann_json )

请注意,并非所有图书馆都准备好以这种方式收录

关于c++ - 如何正确配置cmake文件为nlohmann_json构建一个简单的hello world?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60607037/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com