Получить VCPKG для включения каталога VCPKG Включить в путь включения при построении порта - PullRequest
1 голос
/ 16 февраля 2020

Я пытаюсь создать новый порт для VCPKG для проекта Arabica . Команда установки vcpkg не выполняется. Первая ошибка выглядит следующим образом.

...\include\XPath/impl/xpath_namespace_context.hpp(7,10):
fatal error C1083: Cannot open include file: 'boost/shared_ptr.hpp':
No such file or directory [D:\vcpkg\buildtrees\arabica\x64-windows-dbg\mangle.vcxproj]

Дело в том, что этот файл установлен в каталоге включения VCPKG. Если быть точным, он установлен в D: \ vcpkg \ instal \ x64-windows \ include \ boost \ shared_ptr.hpp.

Команда, используемая для компиляции файла, выглядит следующим образом.

...\CL.exe /c /I"D:\vcpkg\buildtrees\arabica\x64-windows-dbg\include" /I"D:\vcpkg\buildtrees\arabica\src\0-February-67b234ed05\include" /Z7 /W3 /WX- /diagnostics:column /MP /Od /Ob0 /D WIN32 /D _WINDOWS /D _DEBUG /D ARABICA_DEBUG /D ARABICA_NOT_USE_PRAGMA_LINKER_OPTIONS /D "CMAKE_INTDIR=\"Debug\"" /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /GR /Fo"xgrep.dir\Debug\\" /Fd"xgrep.dir\Debug\vc142.pdb" /Gd /TP /errorReport:queue  /utf-8 "D:\vcpkg\buildtrees\arabica\src\0-February-67b234ed05\examples\XPath\xgrep.cpp"

Если бы я мог просто заставить VCPKG добавить аргумент командной строки / I "D: \ vcpkg \ instal \ x64-windows \ include", он бы работал.

Содержимое моего файла CONTROL выглядит следующим образом.

Source: arabica
Version: 2020-February
Homepage: https://github.com/BenKeyFSI/arabica
Description: Arabica is an XML and HTML processing toolkit, providing SAX2, DOM, XPath, and XSLT implementations, written in Standard C++.
Build-Depends: boost-mpl, boost-type-traits, boost-spirit, boost-function, boost-bind, boost-smart-ptr, boost-lexical-cast

Содержимое файла portfile.cmake выглядит следующим образом.

include(vcpkg_common_functions)

vcpkg_from_github(
  OUT_SOURCE_PATH SOURCE_PATH
  REPO BenKeyFSI/arabica
  REF 2020-February
  SHA512 3cf56a71c53e35eb2bc48332c96958e6800e5735a629f292f47e9b22b106f378e45abe046d6a7ed8604fe434d356efbf8744bd31fa905de6fcec62c7223f9e4c
  HEAD_REF master
)

vcpkg_configure_cmake(
  SOURCE_PATH ${SOURCE_PATH}
  PREFER_NINJA
)
vcpkg_install_cmake()
vcpkg_copy_pdbs()

file(INSTALL ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/arabica RENAME copyright)

Это происходит из-за ошибки компилятора, о которой я упоминал выше, и некоторых других из-за отсутствия заголовочных файлов Boost. Ни одна из этих ошибок компилятора не возникла бы, если бы она просто включила каталог включения VCPKG в список включаемых каталогов, поскольку Boost уже установлен, а файл CONTROL утверждает, что эта библиотека зависит от Boost.

Есть ли магическое заклинание Мне нужно перейти либо к vcpkg_configure_cmake, либо к vcpkg_install_cmake, который говорит «включить каталог включения VCPKG в путь включения?»

1 Ответ

1 голос
/ 09 апреля 2020

Если бы я мог просто заставить VCPKG добавить аргумент командной строки / I "D: \ vcpkg \ instal \ x64-windows \ include", он бы работал.

Вы не Не нужно убеждать vcpkg сделать это, но cmake. Поэтому просто замените ваш vcpkg_configure_cmake вызов на:

vcpkg_configure_cmake(
  SOURCE_PATH ${SOURCE_PATH}
  PREFER_NINJA
  OPTIONS -DBUILD_WITH_BOOST=ON
)

, чтобы фактически сделать find_package вызов для повышения в вашем CMakeLists.txt. (На самом деле BUILD_WITH_BOOST выглядит не как опция, так как это требование сборки?!?!). Также лучше связать с целью Boost::headers, так как это вызвало бы ошибку CMake, если цель недоступна.

Затем он будет создан, но не сможет связать следующие ошибки (триплет x64-windows):

taggle.cpp.obj : error LNK2001: unresolved external symbol "public: static int const Arabica::SAX::Schema::M_ANY" (?M_ANY@Schema@SAX@Arabica@@2HB)
taggle.cpp.obj : error LNK2001: unresolved external symbol "public: static int const Arabica::SAX::Schema::M_EMPTY" (?M_EMPTY@Schema@SAX@Arabica@@2HB)
taggle.cpp.obj : error LNK2001: unresolved external symbol "public: static int const Arabica::SAX::Schema::M_PCDATA" (?M_PCDATA@Schema@SAX@Arabica@@2HB)
taggle.cpp.obj : error LNK2001: unresolved external symbol "public: static int const Arabica::SAX::Schema::M_ROOT" (?M_ROOT@Schema@SAX@Arabica@@2HB)
taggle.cpp.obj : error LNK2001: unresolved external symbol "public: static int const Arabica::SAX::Schema::F_RESTART" (?F_RESTART@Schema@SAX@Arabica@@2HB)
taggle.cpp.obj : error LNK2001: unresolved external symbol "public: static int const Arabica::SAX::Schema::F_CDATA" (?F_CDATA@Schema@SAX@Arabica@@2HB)
taggle.cpp.obj : error LNK2001: unresolved external symbol "public: static int const Arabica::SAX::Schema::F_NOFORCE" (?F_NOFORCE@Schema@SAX@Arabica@@2HB)
taggle.exe : fatal error LNK1120: 7 unresolved externals

Поэтому я предполагаю, что ваш файл CMakeLists.txt имеет логические ошибки, если не удается найти внутренние символы , (Сборка x64-windows-static выполнена успешно, поэтому проблема с видимостью символа)

вам также необходимо добавить

file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")

в файл portfile.cmake

...