我请求你的帮助和/或建议,就我遇到的一个奇怪的问题,试图理解柯南。
首先,错误是:
著名人物:/bin/ld: cannot find -lnlohmann_json_schema_validator
我要做的是:尝试构建基于nlohmann_json的json模式验证器的主要示例,使用cmake和conan包管理器。
链接:
CMakeLists.txt非常简单:
cmake_minimum_required(VERSION 3.10)
project(app VERSION 1.0.0 LANGUAGES CXX)
add_executable(${PROJECT_NAME} src/main.cpp)
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)
if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/master/conan.cmake"
"${CMAKE_BINARY_DIR}/conan.cmake")
endif()
include(${CMAKE_BINARY_DIR}/conan.cmake)
# Point 1
conan_cmake_run(REQUIRES json-schema-validator/2.1.0 BASIC_SETUP BUILD missing)
target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})
# Point 2
target_include_directories(${PROJECT_NAME} PUBLIC "src")从这一点开始,我搜索并发现了不同的信息:
/home/<user>/.conan/data/json-schema-validator/2.1.0/_/_/package/feb79143ef49afa1ac08f157e4ea835476439057/lib中的库.从我的角度看,柯南那边似乎相当准确.为什么在构建Makefiles时不给CMake一个正确的路径?conan_cmake_run(...)的使用。所以我根据关于Github的文件修改了它conan_cmake_configure(REQUIRES json-schema-validator/2.1.0
GENERATORS cmake)
conan_cmake_autodetect(settings)
conan_cmake_install(PATH_OR_REFERENCE .
BUILD missing
REMOTE conan-center
SETTINGS ${settings})(这里我得到了错误fatal error: nlohmann/json-schema.hpp: No such file or directory。所以,这种做事方式甚至连文件都不包括)
#add_subdirectory(vendor/json)
#add_subdirectory(vendor/json-schema-validator)
#target_link_libraries(${PROJECT_NAME} nlohmann_json::nlohmann_json nlohmann_json_schema_validator)但是,如果让我的项目构建的唯一方法是避免使用包管理器,那么使用包管理器使我的生活变得更容易有什么意义呢?
有人已经遇到这种问题了吗?或者我可以尝试或者改变另一个想法?
任何帮助都将不胜感激!所以,提前谢谢!
发布于 2021-04-19 21:38:20
我不知道您在哪里找到了教程、示例或解释,但是您应该阅读正式的conan 自述文件,其中包含一个功能示例。
说过,您的情况可以通过以下示例来解决:
cmake_minimum_required(VERSION 3.5)
project(validator CXX)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})
if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/v0.16.1/conan.cmake"
"${CMAKE_BINARY_DIR}/conan.cmake"
EXPECTED_HASH SHA256=396e16d0f5eabdc6a14afddbcfff62a54a7ee75c6da23f32f7a31bc85db23484
TLS_VERIFY ON)
endif()
include(${CMAKE_BINARY_DIR}/conan.cmake)
conan_cmake_configure(REQUIRES json-schema-validator/2.1.0
GENERATORS cmake_find_package)
conan_cmake_autodetect(settings)
conan_cmake_install(PATH_OR_REFERENCE .
BUILD missing
REMOTE conan-center
SETTINGS ${settings})
find_package(nlohmann_json_schema_validator REQUIRED)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} nlohmann_json_schema_validator::nlohmann_json_schema_validator)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)这里有一些不同之处,我使用的是CMake目标,而不是CMake变量CONAN_LIBS,我要求使用cmake_find_package生成器。这是一种现代的CMake方法。
https://stackoverflow.com/questions/67165024
复制相似问题