#c #docker #cmake #module #continuous-integration
#c #docker #cmake #модуль #непрерывная интеграция
Вопрос:
У меня есть проект cmake, который успешно создается локально, но ошибки с
include could not find load file:
CmakeDependentOption
при попытке сборки на платформе CI или в Docker. Обратите внимание, что CMakeDependentOption.cmake — это скрипт, который поставляется с самим cmake. Поэтому он должен быть просто доступен. На CI для установки cmake я wget
выбираю соответствующую версию cmake со страницы загрузки, разархивирую ее и добавляю каталог bin в переменную PATH
среды. Затем я использую cmake
команду для создания своей библиотеки. Результатом является приведенная выше ошибка.
Я подозреваю, что это означает, что переменная CMake (например, «CMAKE_MODULE_PATH», но нет, поскольку эта переменная кажется пустой в начале скрипта cmake) перепутана или каким-то образом не установлена. Путь к нужному файлу include
<cmake_root>/share/cmake-3.18/Modules/CMakeDependentOption.cmake
И я проверил, что он существует вручную. Мой вопрос: есть ли способ найти этот каталог из cmake? Возможно, a cmake --config
или cmake --libs
mode (немного похоже на pkg-config?)
В противном случае, есть ли у кого-нибудь какие-либо предложения относительно того, почему это происходит и как это обойти.
Комментарии:
1. Это выглядит как опечатка с вашей стороны.
CmakeDependentOption
vsCMakeDependentOption
отличается в файловых системах с учетом регистра.2. Да, это было так. Подумал, что что-то подозрительное. Спасибо!
Ответ №1:
Вы можете локально, потому что, скорее всего, вы не используете платформу на базе Linux, такую как Windows или mac. Это связано с тем, что файловая система Linux чувствительна к регистру. Что означает CmakeDependentOption
, что отличается от CMakeDependentOption
.
Docker запускает контейнеры в Linux, поэтому имена файлов будут учитываться с учетом регистра, и включение завершится ошибкой, если случаи разные.