Неспособность использовать XercesC в проекте CMAKE - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь создать проект CMAKE, который ссылается на xerces-c в Windows.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 использование неправильно?

1 Ответ

0 голосов
/ 28 января 2019

Для подсказки CMake о корне внешних пакетов, используемых в вашем проекте, можно указать этот корень в переменной CMAKE_PREFIX_PATH:

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

Таким образом, вашему CMakeLists.txt не нужнобеспокоюсь об этих подсказках вообще: он просто использует find_package() и ожидает, что все будет работать.

См. также , что мой ответ о других способах использования переменной CMAKE_PREFIX_PATH и других функциях этогопеременная.

...