【问题标题】:CMake Error: Target contains relative path in its INTERFACE_INCLUDE_DIRECTORIESCMake 错误:目标在其 INTERFACE_INCLUDE_DIRECTORIES 中包含相对路径
【发布时间】:2019-10-14 16:49:13
【问题描述】:

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

将所有内容转移到新 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 建议创建 缺少的目录,这似乎只是一种解决方法(我没有尝试调整 this)。 我创建了那些目录,然后我得到了

 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

注意: 其他示例也是如此。

编辑: 我不知道发生了什么变化,但现在按下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) ,但我认为这无关紧要。


以前的状态

要编译和链接 CGAL 示例,在我以前的 PC 中,需要进行一些调整。 编译很顺利,但链接需要一些调整。 为链接读取生成的示例命令行

 /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/lib/ 替换为 /mingw64/lib/

  2. 在每个 link.txt 文件中将标志 -lC:/building/msys64/mingw64/lib/libgmp.dll.a 替换为 -lgmp-lmpfr 也是如此。

【问题讨论】:

  • 你能发布一个你试图编译的源代码的链接吗?它定义 CGAL::CGAL CMake 目标的方式显然存在一些问题,因此我们应该尝试修复定义该目标的 CMake 代码。
  • @DavidGrayson - $ pacman -Qs cgal 给了local/mingw-w64-x86_64-cgal 4.14-1,那就是packages.msys2.org/base/mingw-w64-cgal
  • 这是一个由 MSYS2 开发人员制作的预编译二进制包。您是想仅使用它,还是尝试按照问题顶部的说明自己实际编译 CGAL?
  • 我正在编译/链接来自 CGAL 的示例。但是对于库本身,我使用预编译包...将修复 OP。
  • 我已经尽力回答了,但是如果您需要更多帮助,您应该确切地说出您正在编译的源代码以及您在编译时尝试运行的命令,以便其他人可以在他们的屏幕上看到相同的错误消息,而无需对您在做什么进行大量猜测。

标签: cmake cgal msys2


【解决方案1】:

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

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

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

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

这个错误目录是我attempted to fix at one point 的 MSYS2 的一般问题。

【讨论】:

  • 这确实解决了问题!此外,它使我找到了解决 OP 中“所需的两种类型的修复...”的#2 的地方。我仍然必须找到解决 #1 的方法才能有一个干净的构建过程。但我可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多