CMake“ find_package”找到了包,但是编译器找不到包含文件

问题描述

我正在尝试构建一个使用nlohmann :: json的程序,但是includes出现了问题。按照我使用的find_package(nlohmann_json 3.9.0 required)的说明,CMake会找到该软件包,但是在构建时,我收到一条错误消息:Fatal error: nlohmann\json.hpp: No such file or directory

这是CMake的输出

Found nlohmann_json: /usr/local/lib64/cmake/nlohmann_json/nlohmann_jsonConfig.cmake (found suitable version "3.9.1",minimum required is "3.9.0")
-- Configuring done
-- Generating done
-- Build files have been written to: /root/vts/build

这是我的完整CMake文件

cmake_minimum_required(VERSION 3.10)

set(CMAKE_disABLE_SOURCE_CHANGES ON)
set(CMAKE_disABLE_IN_SOURCE_BUILD ON)

project(vitanza-service CXX)

add_subdirectory(VitanzaService)
add_executable(vts ${vts_SRC})

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

set_target_properties(vts PROPERTIES CXX_STANDARD 14)
set_target_properties(vts PROPERTIES CXX_STANDARD_required ON)


LINK_DIRECTORIES(/usr/local/lib)


if (NOT WIN32)
    add_compile_options(-Wall -Werror -pipe -fvisibility=hidden)
endif ()

set(CMAKE_CXX_FLAGS_PERFORMANCE "${CMAKE_CXX_FLAGS_RELEASE} -march=native")

if (CMAKE_COMPILER_IS_GNUCXX)
    add_compile_options(-fno-strict-aliasing)
endif ()

find_package(AWSSDK required COMPONENTS dynamodb)
find_package(MysqL required)
find_package(Boost 1.53.0 required COMPONENTS system)
find_package(nlohmann_json 3.9.0 required)


include_directories(${Boost_INCLUDE_Dirs} ${MysqL_INCLUDE_DIR})

target_link_libraries(vts PRIVATE
        Boost::system
        ${AWSSDK_LINK_LIBRARIES}
        ${MysqL_CLIENT_LIBS}
        nlohmann_json::nlohmann_json
        served libserved.so
        )

我不确定是什么问题。我是否应该在include_directories添加一个变量?我什至尝试将路径添加到include目录,但这也不起作用。

我还尝试使用add_path并将该路径添加到include_directories:

find_path(JSON_INCLUDE_DIR nlohmann/json.hpp
/usr/local/include)
...
include_directories(${JSON_INCLUDE_DIR})

最后,我尝试按照概述here使用FetchContent,但似乎没有任何效果

我在使用GCC 8和最新版本的nlohmann :: json的CentOS 8上(我从源代码包括make install构建)。刚刚在Debian 10中尝试过,我遇到了同样的问题。

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...