CMake — невозможно собрать OpenCascade из исходного кода

Я пытаюсь собрать OpenCascade из исходного кода. Я использую это руководство: https://github.com/tpaviot/oce/blob/master/BUILD.MINGWw64.md

Все шаги с 1 по 5, включая загрузку, выполнены. Теперь я пытаюсь построить с помощью CMAKE

* Я использовал параметр «Где находится исходный код», чтобы указать на каталог oce (как указано). * Я использовал параметр «Где собирать двоичные файлы», чтобы указать папку, которую я назвал «СТРОЙКА» внутри каталога, упомянутого в предыдущем шаге (как указано). * Я нажал «Настроить» и выбрал MSYS Makefiles с собственными компиляторами по умолчанию.

Вот и начались ошибки. Я заметил, что CMake создал текстовый файл, поэтому я зашел внутрь и изменил местоположение CMAKE MAKE: CMAKE_MAKE_PROGRAM:FILEPATH=C:/Users/User1/Desktop/OPENCA~1/msys/bin

Там я продвинулся вперед, но появились новые ошибки.

так как мне двигаться дальше?

Затем руководство говорит: Проверить OCE_USE_BUNDLE_SOURCE Проверить OCE_WITH_FREEIMAGE Проверить OCE_WITH_GL2PS Проверить OCE_VISUALISATION

Где я могу установить это? Внутри текстового файла таких переменных нет, и я не могу их настроить на CMAKE.

РЕДАКТИРОВАТЬ: Это ошибки, которые я получаю сейчас:

The C compiler identification is GNU 8.1.0
The CXX compiler identification is GNU 8.1.0
Detecting C compiler ABI info
CMake Error: Generator: execution of make failed. Make command was: C:/Users/User1/Desktop/OPENCA~1/msys/bin cmTC_a5bfb/fast && 
Detecting C compiler ABI info - failed
Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/gcc.exe
CMake Error: Generator: execution of make failed. Make command was: C:/Users/User1/Desktop/OPENCA~1/msys/bin cmTC_d3ad7/fast && 
Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/gcc.exe - broken
CMake Error at C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeTestCCompiler.cmake:66 (message):
  The C compiler

    "C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/gcc.exe"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: C:/Users/User1/Desktop/OpenCascade project/oce/BUILD/CMakeFiles/CMakeTmp
    
    Run Build Command(s):C:/Users/User1/Desktop/OPENCA~1/msys/bin cmTC_d3ad7/fast && Access is denied
    Generator: execution of make failed. Make command was: C:/Users/User1/Desktop/OPENCA~1/msys/bin cmTC_d3ad7/fast && 
    

  

  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:20 (project)


Configuring incomplete, errors occurred!
See also "C:/Users/User1/Desktop/OpenCascade project/oce/BUILD/CMakeFiles/CMakeOutput.log".
See also "C:/Users/User1/Desktop/OpenCascade project/oce/BUILD/CMakeFiles/CMakeError.log".

РЕДАКТИРОВАТЬ 2: в CMake есть несколько нулевых параметров:

введите здесь описание изображения

РЕДАКТИРОВАТЬ 3: Следуя совету Цыварева, я изменил строку на

CMAKE_MAKE_PROGRAM:FILEPATH=C:/Users/User1/Desktop/OPENCA~1/msys/bin/make.exe

Это ошибки, которые я получаю:

 The C compiler identification is GNU 8.1.0
    The CXX compiler identification is GNU 8.1.0
    Detecting C compiler ABI info
    CMake Error: Generator: execution of make failed. Make command was: C:/Users/User1/Desktop/OPENCA~1/msys/bin cmTC_51dc6/fast && 
    Detecting C compiler ABI info - failed
    Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/gcc.exe
    CMake Error: Generator: execution of make failed. Make command was: C:/Users/User1/Desktop/OPENCA~1/msys/bin cmTC_88ba8/fast && 
    Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/gcc.exe - broken
    CMake Error at C:/Program Files/CMake/share/cmake-3.18/Modules/CMakeTestCCompiler.cmake:66 (message):
      The C compiler
    
        "C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/gcc.exe"
    
      is not able to compile a simple test program.
    
      It fails with the following output:

    Change Dir: C:/Users/User1/Desktop/OpenCascade project/oce/BUILD/CMakeFiles/CMakeTmp
    
    Run Build Command(s):C:/Users/User1/Desktop/OPENCA~1/msys/bin cmTC_88ba8/fast && Access is denied
    Generator: execution of make failed. Make command was: C:/Users/User1/Desktop/OPENCA~1/msys/bin cmTC_88ba8/fast && 
    

  

  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:20 (project)


Configuring incomplete, errors occurred!
See also "C:/Users/User1/Desktop/OpenCascade project/oce/BUILD/CMakeFiles/CMakeOutput.log".
See also "C:/Users/User1/Desktop/OpenCascade project/oce/BUILD/CMakeFiles/CMakeError.log".

person user1584421    schedule 27.07.2020    source источник
comment
Вот и начались ошибки. - Какие точные ошибки? В настоящее время ваш вопрос читается так, будто у меня некоторые ошибки, не могли бы вы мне помочь?   -  person Tsyvarev    schedule 27.07.2020
comment
Не удалось найти исполняемый файл make, но я решил эту проблему с помощью этой записи в текстовом файле. Новые ошибки теперь редактируются в вопросе.   -  person user1584421    schedule 28.07.2020
comment
Вы пытаетесь создать Community Edition Open CASCADE. Это очень старая версия Open CASCADE и она не менялась довольно долгое время. Почему бы не использовать официальную версию dev.opencascade.org?   -  person Benjamin Bihler    schedule 28.07.2020
comment
Ваша команда make выглядит странно. Как вы использовали CMake? Вы сами вводили команды? Например, вы можете убедиться, что ваш компилятор находится в пределах пути, запустить cmake-gui, выбрать новый каталог сборки, выбрать исходный каталог и затем запустить Configure. Затем CMake пытается найти все конфигурации и команды самостоятельно и просто сообщает вам (отмечая записи красным цветом), что ему нужно дополнительно и что еще не найдено.   -  person Benjamin Bihler    schedule 28.07.2020
comment
Он не смог найти исполняемый файл make, но я решил это с помощью этой записи в текстовом файле. - 1. Вы решили неправильно: переменная CMAKE_MAKE_PROGRAM должна содержать путь к исполняемому файлу, но вы назначаете ей каталог (C:/Users/User1/Desktop/OPENCA~1/msys/bin). 2. CMake обычно может сам найти исполняемый файл make. Неспособность сделать это обычно сигнализирует о неправильном генераторе CMake. выбранные или неправильные настройки среды. Кстати, какой генератор CMake вы выбрали?   -  person Tsyvarev    schedule 28.07.2020
comment
Кроме того, добавьте в сообщение вопроса точное сообщение об ошибке, когда CMake не может найти исполняемый файл make.   -  person Tsyvarev    schedule 28.07.2020
comment
@BenjaminBihler Единственная причина, по которой я хочу иметь openCascade, заключается в том, что я хочу скомпилировать эту программу: github.com/chfritz/ шаг2stl. Он говорит, что ему нужен OpenCascade. Я не знал, что есть исполняемый файл Windows. Вот почему я пытался создать источник. Однако перед загрузкой страница загрузки требовала входа в систему. Это нормально? Я думал, что это с открытым исходным кодом. Что касается вашего второго комментария, я его не понял. Я не запускал никаких команд. Я просто следовал этому руководству: github.com/tpaviot/oce/blob /master/BUILD.MINGWw64.md. Поможет ли мне dling exe скомпилировать эту программу?   -  person user1584421    schedule 30.07.2020
comment
@Tsyvarev Я отредактировал вопрос.   -  person user1584421    schedule 30.07.2020
comment
@user1584421 user1584421 Да, это с открытым исходным кодом, но они хотят, чтобы вы вошли в систему перед его загрузкой. Кажется, что step2stl был запрограммирован для Open CASCADE 6.5. В этом случае на самом деле старая версия сообщества может подойти достаточно хорошо?! Если записи типа OCE_USE_BUNDLE_SOURCE не появились, возможно, вы выбрали неверную исходную папку. В исходной папке OCE должен быть файл с именем CMakeLists.txt. Это правильная папка! Выберите этот и снова нажмите Configure.   -  person Benjamin Bihler    schedule 30.07.2020
comment
Также изменился Oce-Win-Bundle, но документацию не обновили. Теперь его необходимо клонировать в каталог OCE, чтобы автоматическая настройка прошла успешно. Таким образом, если ваш репозиторий OCE был клонирован в каталог oce, должны быть файл oce/CMakeLists.txt, подкаталог oce/oce-win-bundle и файл oce/oce-win-bundle/CMakeLists.txt. Затем вы правильно настроили свой проект и можете начать с шагов конфигурации и компиляции.   -  person Benjamin Bihler    schedule 30.07.2020
comment
Не уверен, где вы изменили CMAKE_MAKE_PROGRAM, но, судя по выходным данным, CMake по-прежнему использует C:/Users/User1/Desktop/OPENCA~1/msys/bin.   -  person Tsyvarev    schedule 30.07.2020
comment
@Tsyvarev Да, ты был прав, я облажался. Я исправил это сейчас.   -  person user1584421    schedule 30.07.2020
comment
@BenjaminBihler Большое спасибо! Вы были очень полезны, я почти там!. Однако теперь в документации говорится: «Выберите каталог вашего клона oce-win-bundle с помощью OCE_BUNDLE_ROOT_PATH». Однако на CMake нет опции. Это потому, что я поместил пакет oce-win-bundle в папку oce?   -  person user1584421    schedule 30.07.2020
comment
@BenjaminBihler Я закончил с CMake. Он успешно сгенерировал файлы сборки. Итак, я перехожу к следующему шагу в документации: «Запустите MSYS и сделайте». Однако я запускаю msys.bat в каталоге msys — отдельно от каталога oce, и я запускаю его как администратор. Я получаю его сообщение в командной строке Система не может найти указанный путь. В то же время появляется предупреждение, в котором отображается сообщение Windows не может найти C:\Users\User1\Desktop\OpenCascade. Убедитесь, что вы правильно ввели имя, а затем повторите попытку. Однако я не вводил никакого имени, я просто запускал летучую мышь, как в документации.   -  person user1584421    schedule 31.07.2020
comment
Я использую MSYS2, поэтому я не уверен... есть ли еще msys.exe, с которого можно было бы запустить? Разве в меню «Пуск» Windows также нет записи, чтобы открыть оболочку MSYS? Если это полностью не удается, вы также можете попробовать MSYS2 (я переключился несколько лет назад). Удачи!   -  person Benjamin Bihler    schedule 31.07.2020
comment
@BenjaminBihler Я сделал это. У меня есть msys2. Я не уверен, есть ли конфликт со старым msys, потому что в конфигурации CMake я указал «CMAKE_MAKE_PROGRAM:FILEPATH=C:/Users/User1/Desktop/OPENCA~1/msys/bin/make.exe» (внутри CMakeCache. txt), и это старая версия msys, которая у меня была. В любом случае, я запустил msys 2, отредактировал «etc/nsswitch.conf» с помощью: «db_home: windows» и перешел в каталог BUILD, где CMake генерировал все файлы. Ввел «make» в оболочку msys2, как сказано в документации, и получил «bash: make: команда не найдена».   -  person user1584421    schedule 03.08.2020
comment
@BenjaminBihler Не могли бы вы поделиться некоторыми соображениями? Я документирую весь процесс, чтобы другие пользователи могли извлечь из этого пользу в будущем.   -  person user1584421    schedule 03.08.2020
comment
Скорее всего, make находится в вашем пути Windows, но MSYS2 не обязательно добавляет путь Windows к своему собственному пути. Если вы проверите файл msys2.ini в папке установки MSYS2, вы можете добавить (или раскомментировать?) строку MSYS2_PATH_TYPE=inherit, тогда все исполняемые файлы в вашем пути Windows должны быть доступны в MSYS2 без определения вашего пути MSYS2 вручную.   -  person Benjamin Bihler    schedule 03.08.2020
comment
Еще одно замечание: если вы используете mingw-w64 и делаете параллельные сборки и возникают странные ошибки сборки, вы можете попробовать исполняемый файл make с именем mingw32-make. С ним здесь прекрасно работают параллельные сборки. Поэтому, если (надеюсь, скоро) сборка заработает, вы можете выполнить mingw32-make -j 16, чтобы запустить до шестнадцати экземпляров компилятора для быстрой параллельной сборки.   -  person Benjamin Bihler    schedule 03.08.2020
comment
@user1584421 страница загрузки требует авторизации перед загрузкой. Это нормально? Я думал, что это открытый исходный код - исходный код OCCT доступен без входа в систему, просто еще недостаточно документирован: dev.opencascade.org/index.php?q=node/1212#comment-864   -  person gkv311    schedule 03.08.2020
comment
Я набрал make в командной строке, и там программа тоже не распознается. Единственный make.exe, который у меня есть, находится в каталоге msys (старый - тот, который в исходной документации мне было сказано получить, но не запустился). Я сделал сканирование системы, и я нашел его только там. Но у меня MinGW, msys2 не установлен. Почему у меня нет марки?   -  person user1584421    schedule 03.08.2020
comment
@BenjaminBihler Я установил make, используя «pacman -S --needed base-devel». Я направляюсь к месту сборки, набираю make и получаю следующие ошибки:   -  person user1584421    schedule 03.08.2020
comment
@BenjaminBihler $ make Сканирование зависимостей целевого freetype [ 0%] Создание объекта C oce-win-bundle/libs/freetype/CMakeFiles/freetype.dir/src/autofit/autofit.c.obj make[2]: *** [ oce-win-bundle/libs/freetype/CMakeFiles/freetype.dir/build.make:83: oce-win-bundle/libs/freetype/CMakeFiles/freetype.dir/src/autofit/autofit.c.obj] Ошибка 1 make[1]: *** [CMakeFiles/Makefile2:2540: oce-win-bundle/libs/freetype/CMakeFiles/freetype.dir/all] Ошибка 2 make: *** [Makefile:182: all] Ошибка 2   -  person user1584421    schedule 03.08.2020
comment
Но тут в дело вступает комментарий пользователя Цыварева: какой генератор CMake вы выбрали? В cmake-gui вы найдете его имя рядом с тремя кнопками Configure, Generate, Open Project. С вашей конфигурацией вам, вероятно, следует использовать MSYS Makefiles или, возможно, MinGW Makefiles в качестве генератора. Перед изменением генератора вам, возможно, придется удалить каталог сборки и перезапустить конфигурацию?   -  person Benjamin Bihler    schedule 03.08.2020
comment
В нем говорится: Текущий генератор: MSYS Makefiles. Я следовал инструкции из документации.   -  person user1584421    schedule 03.08.2020
comment
Но я должен добавить, что в этом процессе у меня был «старый» msys. не тот msys2, который я на самом деле набрал «сделать»   -  person user1584421    schedule 03.08.2020
comment
@BenjaminBihler Я удалил сборку и начал все сначала. Я выбираю два каталога. Я установил CMAKE_MAKE_PROGRAM в /bin/make.exe (ИЗ КАТАЛОГ MSYS - НЕ ОН MSYS 2 Я УСТАНОВИЛ ПОЗЖЕ). Я выбрал файлы MSYS Makefile (НЕ файлы Makefile MinGW!) с собственными компиляторами по умолчанию. Пакет oce-win-bundle находится в папке oce. текущий генератор: make-файлы Msys. Все выборки проверены как из документации. Настройка и сборка завершены. Затем я открываю msys2 от имени администратора, cd в каталоге сборки типа «make», и вот что я получаю   -  person user1584421    schedule 04.08.2020
comment
@BenjaminBihler User1@User1-PC MSYS ~/Desktop/OpenCascade project/oce/BUILD # make Сканирование зависимостей целевого freetype [ 0%] Создание объекта C oce-win-bundle/libs/freetype/CMakeFiles/freetype.dir/src/ autofit/autofit.c.obj make[2]: *** [oce-win-bundle/libs/freetype/CMakeFiles/freetype.dir/build.make:83: oce-win-bundle/libs/freetype/CMakeFiles/ freetype.dir/src/autofit/autofit.c.obj] Ошибка 1 make[1]: *** [CMakeFiles/Makefile2:2540: oce-win-bundle/libs/freetype/CMakeFiles/freetype.dir/all] Ошибка 2 make: *** [Makefile:182: all] Ошибка 2   -  person user1584421    schedule 04.08.2020
comment
Хм, это полное сообщение об ошибке? Почему-то он вообще не говорит, какая ошибка произошла. Из вашего описания единственное очевидное отличие, которое я вижу, это то, что я никогда не устанавливал вручную CMAKE_MAKE_PROGRAM. CMake автоматически определяет его как .../mingw64/bin/mingw32-make.exe на моем компьютере. Но я не знаю, является ли это причиной ваших бед...?   -  person Benjamin Bihler    schedule 04.08.2020
comment
@BenjaminBihler У меня нет make.exe в месте установки Mingw. Хотя я установил его (как сказано в документации). Единственный make.exe, который у меня есть, — это загруженные файлы msys — опять же из документации. Хотя я использовал msys2 - для команды make.   -  person user1584421    schedule 04.08.2020
comment
Почему вы сами входите в CMAKE_MAKE_PROGRAM? Он неправильно определяется во время настройки? Обычно вам не нужно самостоятельно вводить инструменты сборки. CMake обнаружит их автоматически, если они находятся в пределах вашего пути!   -  person Benjamin Bihler    schedule 04.08.2020
comment
@БенджаминБихлер. Когда я впервые настраиваю CMake, он создает текстовый файл в этом каталоге. Я вручную открываю текстовый файл и вставляю CMAKE_MAKE_PROGRAM:FILEPATH=C:/Users/User1/Desktop/OPENCA~1/msys/bin/make.exe, потому что ранее запись была, но расположение make было пустым. Этот make.exe — тот, который я скачал из пакета msys, о котором говорится в документации.   -  person user1584421    schedule 04.08.2020
comment
@BenjaminBihler Я открыл командную строку и набрал make, но она не распознана. Так что make не находится в моем PATH. Но я скачал msys2, как вы сказали, и установил там make. Таким образом, хотя msys2 распознает make, командная строка этого не делает.   -  person user1584421    schedule 04.08.2020
comment
Давайте продолжим обсуждение в чате.   -  person Benjamin Bihler    schedule 04.08.2020


Ответы (1)


Вот как я собрал OpenCascade 7.4.0 (статический+общий) с http://www.opencascade.com/content/latest-release под MSYS2 с помощью Ninja:

INSTALLPREFIX=/usr/local
mkdir -p build_static build_shared &&
 cmake.exe -Wno-dev -GNinja -DCMAKE_INSTALL_PREFIX:PATH=$INSTALLPREFIX/share/opencascade -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_LIBRARY_TYPE:STRING=Static -DUSE_VTK:BOOL=OFF -DUSE_RAPIDJSON:BOOL=ON -DUSE_FREEIMAGE:BOOL=OFF -DUSE_FFMPEG:BOOL=OFF -DUSE_D3D:BOOL=OFF -DBUILD_RELEASE_DISABLE_EXCEPTIONS:BOOL=ON -DBUILD_USE_PCH:BOOL=OFF -DBUILD_SAMPLES_QT:BOOL=OFF -S. -Bbuild_static &&
 cmake.exe -Wno-dev -GNinja -DCMAKE_INSTALL_PREFIX:PATH=$INSTALLPREFIX/share/opencascade -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_SHARED_LIBS:BOOL=ON -DBUILD_LIBRARY_TYPE:STRING=Shared -DUSE_VTK:BOOL=OFF -DUSE_RAPIDJSON:BOOL=ON -DUSE_FREEIMAGE:BOOL=OFF -DUSE_FFMPEG:BOOL=OFF -DUSE_D3D:BOOL=OFF -DBUILD_RELEASE_DISABLE_EXCEPTIONS:BOOL=ON -DBUILD_USE_PCH:BOOL=OFF -DBUILD_SAMPLES_QT:BOOL=OFF -S. -Bbuild_shared &&
 sed -i.bak -e "s/LINK_LIBRARIES *= *[^ ]*libTKTopAlgo\.dll\.a.*-lfreetype.*libTKernel\.dll\.a.*$/& -Wl,--as-needed -lz -lbz2 -lharfbuzz -lpng -lbrotlidec/" build_shared/build.ninja &&
 ninja -Cbuild_static install/strip &&
 ninja -Cbuild_shared install/strip &&
 echo Success
person Brecht Sanders    schedule 13.08.2020