CMake Ошибка: цель содержит относительный путь в своем INTERFACE_INCLUDE_DIRECTORIES - PullRequest
0 голосов
/ 14 октября 2019

Я хочу скомпилировать пример Advancing_front_surface_reconstruction из пакета CGAL под Win10 + PortableApps Msys2. Для самой библиотеки я использую предварительно скомпилированный пакет ($ pacman -Qs cgal дает local/mingw-w64-x86_64-cgal 4.14-1). Я имел обыкновение делать это на моем предыдущем ПК, см. Подробности ниже.

После переноса всего на новый ПК (просто копирование, это PortableApps), я произвел обновление системы в Msys2 (требуется для другихпричины). Я продолжаю как обычно: mkdir build, cd build, ccmake ... При выборе режима Release и многословности ON при нажатии g для создания файлов я получил

 CMake Error in CMakeLists.txt:
   Imported target "CGAL::CGAL" includes non-existent path
     "C:/building/msys64/mingw64/include"
   in its INTERFACE_INCLUDE_DIRECTORIES.  Possible reasons include:
   * The path was deleted, renamed, or moved to another location.
   * An install or uninstall procedure did not complete successfully.
   * The installation package was faulty and references files it does not
   provide.

При нажатии e для выхода из сообщения об ошибке графический интерфейс ccmake был закрыт ине было сгенерированных файлов.

После небольшого поиска в Google, этот предложил создать отсутствующие каталоги , которые кажутся просто обходным решением (я не пытался адаптировать это ). Я создал эти каталоги, а затем получил

 CMake Error in CMakeLists.txt:
   Target "CGAL::CGAL" contains relative path in its
   INTERFACE_INCLUDE_DIRECTORIES:

     "C:/building/msys64/mingw64/include"

Как я могу это исправить? Я не нашел подходящих ответов вокруг.

Возможно, связанные ссылки, но которые яне удалось найти подходящего решения:

https://gitlab.kitware.com/cmake/cmake/commit/634bb33f3aa3b7f2181a896c025976b52171524a

https://cmake.org/cmake/help/v3.12/manual/cmake-buildsystem.7.html

ПРИМЕЧАНИЕ : То же самое произошло с другими примерами.

EDIT : я не знаю, что изменилось, но теперь после нажатия e для выхода из сообщения об ошибке (см. Выше) присутствуют все сгенерированные файлы, включая Makefile. Поэтому я могу действовать, как описано ниже в Предыдущее положение дел . Это происходит с или без отсутствующих директорий (сообщение об ошибке меняется, но я могу сгенерировать свои исполняемые файлы). AFAICT, единственное связанное изменение состоит в том, что я только что установил пакеты, mingw-w64-x86_64-eigen3 (3.3.7-1), mingw-w64-x86_64-suitesparse (5.4.0-1), mingw-w64-x86_64-lapack (3.8.0-5), но я не думаю, что это должно иметь значение.


Предыдущее состояниедел

Чтобы скомпилировать и связать примеры CGAL, на моем предыдущем ПК требовалась некоторая настройка. Компиляция прошла нормально, но для связывания потребовалось несколько настроек. Пример командной строки, созданной для связывания операций чтения:

 /mingw64/bin/c++.exe -O3 -DNDEBUG  -Wl,--enable-auto-import CMakeFiles/reconstruction_structured.dir/reconstruction_structured.cpp.o  -o reconstruction_structured.exe -Wl,--out-implib,libreconstruction_structured.dll.a -Wl,--major-image-version,0,--minor-image-version,0 /mingw64/lib/lib/libmpfr.a /mingw64/lib/lib/libgmp.dll.a /mingw64/lib/lib/libCGAL.dll.a -lC:/building/msys64/mingw64/lib/libgmp.dll.a -lC:/building/msys64/mingw64/lib/libmpfr.a

Два типа необходимых исправлений:

  1. Замена /mingw64/lib/lib/ на /mingw64/lib/ в каждом (link.txt; build.make) файл.

  2. Замена флага -lC:/building/msys64/mingw64/lib/libgmp.dll.a на -lgmp в каждом link.txt файле. Аналогично для -lmpfr.

1 Ответ

2 голосов
/ 15 октября 2019

Запустите эту команду, чтобы найти все места в файлах CGAL CMake, где упоминается ошибочный каталог C:/building/:

grep -r '/building/' /mingw64/lib/cmake/CGAL

Для каждого экземпляра либо удалите его, либо замените его чем-нибудь более подходящим.

(Примечание: я сам не пробовал.)

Эта ошибочная директория является общей проблемой MSYS2, которую я пытался исправить в один момент .

...