c++ "找不到由" libhydrogen "提供的具有以下任何名称的包配置文件"使用Cmake和vcpkg进行编译时出错

mbskvtky  于 2022-12-01  发布在  其他
关注(0)|答案(1)|浏览(143)

输出出错

在CMakeLists.txt中出现CMake错误:37(查找包):找不到由“libhydrogen”提供的具有以下任何名称的软件包配置文件:
数据库配置
将“libhydrogen”的安装前缀添加到CMAKE_PREFIX_PATH中,或将“libhydrogen_DIR”设置为包含上述文件之一的目录。如果“libhydrogen”提供单独的开发包或SDK,请确保已安装。
配置不完整,出现错误!

* 科迪戈做Cmake*:

cmake_minimum_required(VERSION 3.13.4)

project(Application)

set(CMAKE_PREFIX_PATH /app/libraries/vcpkg_installed/x64-linux)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY /app/build/bin)
option(RUN_PROD "Prod?" OFF)

set (CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static)
set(VCPKG_CMAKE_SYSTEM_NAME Linux)

set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
set(THREADS_PREFER_PTHREAD_FLAG ON)

# link_directories(/usr/lib)
# include_directories(/usr/include)

include_directories(HEADER_FILES /app/src/includes)

find_package(PkgConfig)
find_package(Boost REQUIRED COMPONENTS system)
find_package(plog CONFIG REQUIRED)
find_package(OpenSSL REQUIRED)
find_library(PQ_LIB pq)
find_package(libpqxx CONFIG REQUIRED)
find_package(fmt CONFIG REQUIRED)
find_path(JWT_CPP_INCLUDE_DIRS "jwt-cpp/base.h")
find_package(libhydrogen CONFIG REQUIRED)

pkg_check_modules(Pistache REQUIRED IMPORTED_TARGET libpistache)

add_executable(
    ${PROJECT_NAME}
    app/config/Connect.cpp

    app/config/Logger.cpp 
    
    app/utils/Queries.cpp

    app/middleware/Authentication.cpp

    app/utils/Tratament.cpp

    app/models/UserModel.cpp

    app/models/ArticleModel.cpp

    app/controllers/UserController.cpp

    app/controllers/ArticleController.cpp

    app/routes/Marker.cpp

    app/Server.cpp
)

include_directories(
    ${PROJECT_NAME} PRIVATE includes/config
)
# add_library(
#     ${PROJECT_NAME}-libs SHARED 
#     app/config/Connect.cpp
# )

target_link_libraries(
    ${PROJECT_NAME} 
    PUBLIC OpenSSL::SSL OpenSSL::Crypto
    PRIVATE plog::plog
    PRIVATE pq
    PRIVATE libpqxx::pqxx
    PRIVATE PkgConfig::Pistache
    PRIVATE fmt::fmt-header-only
    PRIVATE ${JWT_CPP_INCLUDE_DIRS}
    PRIVATE hydrogen::hydrogen
)

我知道问题出在试图包含libhydrogen的时候,因为没有这个库的话代码编译正常。我的问题是,是否有人知道我如何让cmake找到这个库?它位于我项目的一个文件夹中,而不是/usr/lib!

shyt4zoc

shyt4zoc1#

这个问题解决了。我没有使用libhydrogen库,我把它改成了botan(都是为了加密)。但是,在编译的时候我遇到了同样的错误。我所做的就是用编译指令创建这个Find.cmake。
它看起来是这样的:
模块/查找Botan.cmake

find_package(PkgConfig REQUIRED)

if (NOT TARGET Botan::Botan)
  pkg_check_modules(Botan QUIET IMPORTED_TARGET botan)
  if (TARGET PkgConfig::Botan)
    add_library(Botan::Botan ALIAS PkgConfig::Botan)
  endif ()
endif ()

if (NOT TARGET Botan::Botan)
  find_path(Botan_INCLUDE_DIRS NAMES botan/botan.h
            PATH_SUFFIXES botan-2
            DOC "The Botan include directory")

  find_library(Botan_LIBRARIES NAMES botan botan-2
               DOC "The Botan library")

  mark_as_advanced(Botan_INCLUDE_DIRS Botan_LIBRARIES)

  add_library(Botan::Botan IMPORTED UNKNOWN)
  set_target_properties(
    Botan::Botan
    PROPERTIES
    IMPORTED_LOCATION "${Botan_LIBRARIES}"
    INTERFACE_INCLUDE_DIRECTORIES "${Botan_INCLUDE_DIRS}"
  )
endif ()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
  Botan
  REQUIRED_VARS Botan_LIBRARIES Botan_INCLUDE_DIRS
)

CmakeLists看起来像这样:

cmake_minimum_required(VERSION 3.13.4)

project(Application)

set(CMAKE_PREFIX_PATH /app/libraries/vcpkg_installed/x64-linux)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY /app/build/bin)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/modules")
option(RUN_PROD "Prod?" OFF)

set (CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static)
set(VCPKG_CMAKE_SYSTEM_NAME Linux)

set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
set(THREADS_PREFER_PTHREAD_FLAG ON)

# link_directories(/usr/lib)
# include_directories(/usr/include)

include_directories(HEADER_FILES /app/src/includes)

find_package(PkgConfig)
find_package(Boost REQUIRED COMPONENTS system)
find_package(plog CONFIG REQUIRED)
find_package(OpenSSL REQUIRED)
find_library(PQ_LIB pq)
find_package(libpqxx CONFIG REQUIRED)
find_package(fmt CONFIG REQUIRED)
find_path(JWT_CPP_INCLUDE_DIRS "jwt-cpp/base.h")

find_package(Botan REQUIRED)

pkg_check_modules(Pistache REQUIRED IMPORTED_TARGET libpistache)

add_executable(
    ${PROJECT_NAME}
    app/config/Connect.cpp

    app/config/Logger.cpp 
    
    app/utils/Queries.cpp

    app/middleware/Authentication.cpp

    app/utils/Tratament.cpp

    app/models/UserModel.cpp

    app/models/ArticleModel.cpp

    app/controllers/UserController.cpp

    app/controllers/ArticleController.cpp

    app/routes/Marker.cpp

    app/Server.cpp
)

include_directories(
    ${PROJECT_NAME} PRIVATE includes/config
)
# add_library(
#     ${PROJECT_NAME}-libs SHARED 
#     app/config/Connect.cpp
# )

target_link_libraries(
    ${PROJECT_NAME} 
    PUBLIC OpenSSL::SSL OpenSSL::Crypto
    PRIVATE plog::plog
    PRIVATE pq
    PRIVATE libpqxx::pqxx
    PRIVATE PkgConfig::Pistache
    PRIVATE fmt::fmt-header-only
    PRIVATE ${JWT_CPP_INCLUDE_DIRS}
    PRIVATE Botan::Botan
)

相关问题