【问题标题】:Failing to use XercesC in a CMAKE project无法在 CMAKE 项目中使用 XercesC
【发布时间】:2019-06-21 08:08:35
【问题描述】:

我正在尝试创建一个链接到 Windows 上的 xerces-c 的 CMAKE 项目。 Xerces-C 是用 cmake 构建的,并安装在一个文件夹中。这是安装的布局:

xercesc/3.2.2
  |
  |-bin
  |  |-xerces-c_3_2.dll
  |  |-xerces-c_3_2D.dll
  |  |-(many executables)
  |
  |-cmake
  |  |-XercesCConfig.cmake
  |  |-XercesCConfigInterna.cmale
  |  |-(other .cmake)
  |
  |-include
  |  |-xercesc
  |     |-dom
  |     |-framework
  |     |-internal
  |     |-parsers
  |     |-util
  |     |-(other folders)
  |
  |-lib
  |  |-xerces-c_3.lib
  |  |-xerces-c_3D.lib
  |
  |-share
     |-doc
        |-(documentation

这是我的 CMakeFile.txt

cmake_minimum_required (VERSION 3.10.0)

project (myproject)

set (CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} ${XERCES_ROOT})
message (STATUS "CMAKE_INCLUDE_PATH is ${CMAKE_INCLUDE_PATH}")
find_package (XercesC REQUIRED)

set (CMAKE_INCLUDE_CURRENT_DIR ON)
include_directories (${CMAKE_CURRENT_SOURCE_DIR}/..)
include_directories (${XercesC_INCLUDE_DIR})

set (PROJECT_SRC
  Dummy.cpp
  )

add_library (${PROJECT_NAME} SHARED ${PROJECT_SRC})

XERCES_ROOT 是我的主 CMakeLists.txt 中定义的变量

set (XERCES_ROOT "" CACHE FILEPATH "Root directory of the Xerces-C installation")

我使用以下命令执行 cmake:

 cmake -DBOOST_ROOT=D:\lib\Boost\1.69.0\ -DXERCES_ROOT=d:\lib\xercesc\3.2.2\ -G "Visual Studio 15 2017 Win64" ../

当我执行cmake时,我打印CMAKE_INCLUDE_PATH的内容:

-- CMAKE_INCLUDE_PATH is D:/lib/xercesc/3.2.2

这是正确的位置。我在find_package(XercesC REQUIRED) 行之前设置了这个变量。

但是找不到包。这是错误信息:

CMake Error at C:/Program Files/CMake/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Failed to find XercesC (missing: XercesC_LIBRARY XercesC_INCLUDE_DIR
  XercesC_VERSION)
Call Stack (most recent call first):
  C:/Program Files/CMake/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  C:/Program Files/CMake/share/cmake-3.13/Modules/FindXercesC.cmake:98 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  src/myproject/CMakeLists.txt:7 (find_package)


-- Configuring incomplete, errors occurred!

我做错了什么?我该怎么做才能告诉 CMAKE 在哪里可以找到 Xerces?可能CMAKE_INCLUDE_PATH 用法不对?

【问题讨论】:

  • 它对库XercesC_LIBRARY 有何意义? (也称为,你确定你选择了相同的目标,32 位还是 64 位,没有?)
  • 你到底是什么意思?在错误消息中,它说缺少。而且我选择了正确的目标(64 位)
  • 为什么它会丢失,因为它显然在那里?错误日志说什么(CMakeFiles/CMakeError.log)
  • CMakeFiles\CMakeError.log 未创建。 CMakeFiles\CMakeOutput.log 为空。
  • 这很奇怪。两者都不应该是空的。你确定你看的是正确的位置吗?有一个错误,所以它应该在错误日志中(从未见过它没有发生)。

标签: c++ cmake xerces xerces-c


【解决方案1】:

对于在您的项目中使用的关于外部包根的提示 CMake,可能会在 CMAKE_PREFIX_PATH 变量中提示该根:

cmake -DCMAKE_PREFIX_PATH=d:\lib\xercesc\3.2.2\ <other-options>

这样一来,您的CMakeLists.txt 根本不需要理会这些提示:它只使用find_package() 并期望一切正常。

另请参阅 that my answer,了解使用 CMAKE_PREFIX_PATH 变量的其他方式以及该变量的其他功能。

【讨论】:

    猜你喜欢
    • 2018-05-08
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多