Я "поддерживаю" набор сценариев для пользовательской сборки apache httpd для проекта.Кавычки, потому что я действительно недостаточно квалифицирован для этой задачи, но за последние несколько лет едва смог собрать Apache несколько раз.
Expat был извлечен из дерева исходников APR-util с v1.6+.Предполагается, что процесс сборки apache install expat в среде для сборки против него.Это заставляет меня чувствовать себя неловко, так как я хочу, чтобы мои сценарии сборки были переносимыми из среды и собирали определенный тег tag / sha expat в подмодуле.
Я всегда получаю сообщение об ошибке построения apr-util:
- НЕ удалось найти EXPAT (отсутствует: EXPAT_LIBRARY) (найдена версия "2.1.0")
Вещи, которые я пробовал:
- Копирование файла libexpat \ expat \ lib dir в apr-util \ xml \ expat \ lib, как указано в https://stackoverflow.com/a/45969872/1169420
- Установка вручную EXPAT_LIBRARY и EXPAT_INCLUDE_DIR (и даже EXPAT_LIBRARIES и EXPAT_INCLUDE_DIRS) в libexпапка lib
- добавление вручную этой папки библиотеки в переменную PATH
- добавление вывода сборки expat, а не папки lib источника expat в переменную PATH, а также сборки EXPAT_LIBRARY
- Установка EXPAT_ROOT в исходную папку lib и в скомпилированную expat выходную папку lib (и вставленную cmake_policy (SET CMP0074 NEW) в apr-utils CMakeLists.txt, чтобы включить отключение по умолчаниюполитика, которая позволяет это)
Ничто из этого не изменяет сообщение об ошибке, которое я получаю.У меня практически нет опыта работы с cmake, но я покопался в apr-util CMakeLists.txt и даже в cmake \ share \ cmake-3.14 \ Modules \ FindEXPAT.cmake, пытаясь выяснить, как / что он ищет / не находит.Я замечаю кажущуюся решающей черту там, где ищут ИМЕНА 'expat' или 'libexpat'
find_library(EXPAT_LIBRARY NAMES expat libexpat HINTS ${PC_EXPAT_LIBRARY_DIRS})
И здесь https://cmake.org/cmake/help/v3.12/command/find_library.html (я далеко не все понимаю), это говорит о взятии ИМЕНи пробовать их отдельно или с префиксами и суффиксами для конкретной платформы.Я заметил, что вывод сборки expat заканчивается на
-- Installing: C:/Apache24/lib/expatd.lib
-- Installing: C:/Apache24/bin/expatd.dll
-- Installing: C:/Apache24/include/expat.h
-- Installing: C:/Apache24/include/expat_external.h
-- Installing: C:/Apache24/lib/pkgconfig/expat.pc
-- Installing: C:/Apache24/bin/xmlwf.exe
Итак, в lib идет «expatd», а не «expat» или «libexpat» с любым суффиксом ... Может быть, я даже негенерация того, что для этого нужно apr-util / cmake?
Я потратил на это примерно 10 часов (в этом году - плюс еще 10-20 в прошлом году, когда я попробовал это и в конце концов сдался).Я не знаю, не подходит ли мне этот подход с применением грубой грубой силы, или, может быть, это совершенно невозможно, но я просто не могу представить, что это может быть правдой.Любая помощь будет оценена.
Вот выдержка из файла bat, который я использую для сборки
:: goto skipExpat
echo ******* Building expat *******
:: pause
mkdir %DEVDIR%\build\expat
cd /D %DEVDIR%\build\expat
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=%INSTALL_PREFIX% ..\..\src\libexpat\expat
nmake
nmake install
echo ******* Done building expat *******
:skipExpat
echo ******* Building apr *******
:: pause
mkdir %DEVDIR%\build\apr
cd /D %DEVDIR%\build\apr
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=%INSTALL_PREFIX% -DCMAKE_BUILD_TYPE=RelWithDebInfo -DMIN_WINDOWS_VER=0x0600 -DAPR_HAVE_IPV6=ON -DAPR_INSTALL_PRIVATE_H=ON -DAPR_BUILD_TESTAPR=OFF -DINSTALL_PDB=OFF ..\..\src\apr
nmake
nmake install
echo ******* Done building apr *******
echo ******* Building apr-util *******
:: set EXPAT_ROOT=%DEVDIR%src\libexpat\expat\lib
set EXPAT_ROOT=%INSTALL_PREFIX%\lib
:: pause
mkdir %DEVDIR%\build\apr-util
cd /D %DEVDIR%\build\apr-util
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=%INSTALL_PREFIX% -DOPENSSL_ROOT_DIR=%INSTALL_PREFIX% -DCMAKE_BUILD_TYPE=RelWithDebInfo -DAPU_HAVE_CRYPTO=ON -DAPR_BUILD_TESTAPR=OFF -DINSTALL_PDB=OFF ..\..\src\apr-util
nmake
nmake install
echo ******* Done building apr-util *******