【问题标题】:CMake imported target includes non-existent pathCMake 导入的目标包含不存在的路径
【发布时间】:2019-11-23 17:44:49
【问题描述】:

我已按照Linking against GTest fails 中描述的步骤进行操作,但出现此错误。

CMake Error in src/impl/data_structures/simple_tree/CMakeLists.txt:
      Imported target "GTest::GTest" includes non-existent path

        "~/local/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.

编辑:虽然它失去了“一般性”,但我将 ~/ 路径替换为 完整路径,然后得到这个错误:

/usr/bin/ld: cannot find /home/myself/local/lib/: File format not recognized

路径确实存在。

【问题讨论】:

  • 路径是否存在?尝试删除~,然后写出完整路径。
  • 在 Stack Overflow 上,我们希望所有重要信息都包含在问题帖子本身中。您的代码肯定是导致此类问题的原因,因此请将其添加到问题帖子中。链接到另一个问题可能很有用,但它并不能取代问题帖子中的代码需求。

标签: cmake googletest


【解决方案1】:

在您链接的question 中,您暗示find_package() 在哪里可以找到带有一些GTEST_* 变量的GTest。库变量应提供实际库文件的完全限定名称,而不是库的位置。当您只提供路径时,FindGTest.cmake 模块在包装导入的目标时使用此路径作为实际库;这是不正确的。尝试将您的 CMake 修改为类似的内容,然后从头开始重新运行 CMake:

# adding googletest
set(GOOGLETEST_PATH /home/username/local/googletest)
set(GTEST_INCLUDE_DIR /home/username/local/include/)
set(GTEST_LIBRARY /home/username/local/lib/path/to/libgtest.a)
set(GTEST_MAIN_LIBRARY /home/username/local/lib/path/to/libgtest_main.a)
find_package(GTest REQUIRED)

不管怎样,你真的不应该在调用find_package() 之前设置所有变量。您只需要按照this 答案中的建议设置GTEST_ROOT

【讨论】:

  • hinting 是这里的关键字。事实上,指定目录包含*.so*.a 库。但是,在使用此方法后,我收到了关于“目标中缺少百分比”或其他内容的 make 错误。所以我完全切换到在cmake的配置阶段下载googletest的方法,如相关README中所述,并且有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-18
  • 1970-01-01
  • 2023-03-29
  • 2014-01-05
  • 1970-01-01
  • 2020-10-02
相关资源
最近更新 更多