首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Conan找到库

无法使用Conan找到库
EN

Stack Overflow用户
提问于 2021-04-19 15:34:30
回答 1查看 1.8K关注 0票数 0

我请求你的帮助和/或建议,就我遇到的一个奇怪的问题,试图理解柯南。

首先,错误是:

著名人物:/bin/ld: cannot find -lnlohmann_json_schema_validator

我要做的是:尝试构建基于nlohmann_json的json模式验证器的主要示例,使用cmake和conan包管理器。

链接:

CMakeLists.txt非常简单:

代码语言:javascript
复制
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")

从这一点开始,我搜索并发现了不同的信息:

  • https://stackoverflow.com/a/34256630/7135482:确定库不是由/bin/ld在链接时找到的,但是由于我对所有东西(Conan、Cmake等)都使用默认配置,并且希望库在编译过程中是静态的,所以我想知道为什么/bin/ld无法找到位于/home/<user>/.conan/data/json-schema-validator/2.1.0/_/_/package/feb79143ef49afa1ac08f157e4ea835476439057/lib中的库.从我的角度看,柯南那边似乎相当准确.为什么在构建Makefiles时不给CMake一个正确的路径?
  • 我更改了CMakeLists.txt (在“第1点”和“第2点”之间),认为这是“未命令”conan_cmake_run(...)的使用。所以我根据关于Github的文件修改了它
代码语言:javascript
复制
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。所以,这种做事方式甚至连文件都不包括)

  • 让库及其示例工作的唯一方法是完全传递Conan .,将nlohmann_json回购和json模式验证回购克隆到供应商文件夹中,并将它们添加到CMake系统中,如下所示:
代码语言:javascript
复制
#add_subdirectory(vendor/json)
#add_subdirectory(vendor/json-schema-validator)

#target_link_libraries(${PROJECT_NAME} nlohmann_json::nlohmann_json nlohmann_json_schema_validator)

但是,如果让我的项目构建的唯一方法是避免使用包管理器,那么使用包管理器使我的生活变得更容易有什么意义呢?

有人已经遇到这种问题了吗?或者我可以尝试或者改变另一个想法?

任何帮助都将不胜感激!所以,提前谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-19 21:38:20

我不知道您在哪里找到了教程、示例或解释,但是您应该阅读正式的conan 自述文件,其中包含一个功能示例。

说过,您的情况可以通过以下示例来解决:

代码语言:javascript
复制
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方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67165024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档