CMake Error: Target contains relative path in its INTERFACE_INCLUDE_DIRECTORIES

CMake Error: Target contains relative path in its INTERFACE_INCLUDE_DIRECTORIES

我的意思是在 Win10 + PortableApps Msys2 下从 CGAL 包编译示例 Advancing_front_surface_reconstruction。 对于库本身,我使用预编译包($ pacman -Qs cgal 给出 local/mingw-w64-x86_64-cgal 4.14-1)。 我曾经能够在我以前的 PC 上执行此操作,请参阅下面的详细信息。

把所有东西都转移到一台新电脑上(简单的复制,就是PortableApps)后,我在Msys2做了一次系统更新(其他原因需要)。 我照常进行:mkdir buildcd buildccmake ..。选择 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 gui 已退出并且没有生成任何文件。

谷歌搜索了一下后,this suggested creating the missing dirs, which seems merely a workaround (I did not try adapting this)。 我创建了那些目录,然后我得到了

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

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

我该如何解决这个问题? 我周围没有找到合适的答案。

可能与 link 相关,但我找不到合适的解决方案:

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

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

注意: 其他示例也发生了同样的情况。

编辑: 我不知道发生了什么变化,但现在按 e 退出错误消息(见上文)所有生成的文件都存在,包括 Makefile。 因此,我可以按照 之前的情况 中所述进行操作。 无论有没有 missing dirs 都会发生这种情况(错误消息会更改,但我可以生成我的可执行文件)。 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) , 但我认为这无关紧要。


以前的情况

要编译和 link CGAL 示例,在我以前的 PC 中,需要进行一些调整。 编译很顺利,但是 linking 需要一些调整。 为 linking 读取

生成的示例命令行
 /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. 在每个 (link.txt;build.make) 文件中用 /mingw64/lib/ 替换 /mingw64/lib/lib/

  2. 在每个 link.txt 文件中用 -lgmp 替换标志 -lC:/building/msys64/mingw64/lib/libgmp.dll.a-lmpfr.

  3. 同样

运行 此命令用于查找 CGAL CMake 文件中提及错误目录 C:/building/ 的所有位置:

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

对于每个实例,将其删除或替换为更合适的内容。

(注意:我自己没试过。)

这个错误的目录是我 attempted to fix at one point.

的 MSYS2 的一个普遍问题