CMake 导入的目标包含不存在的路径

Ilo*_*aja 5 cmake googletest

我已按照链接 GTest 失败中描述的步骤进行操作,并收到此错误。

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

        "~/local/include/"
Run Code Online (Sandbox Code Playgroud)

进一步的消息包括:

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.
Run Code Online (Sandbox Code Playgroud)

编辑:虽然它失去了“通用性”,但我~/用完整路径替换了路径,然后收到此错误:

/usr/bin/ld: cannot find /home/myself/local/lib/: File format not recognized
Run Code Online (Sandbox Code Playgroud)

可以肯定的是,这条路是存在的。

squ*_*les 1

在您链接的问题中,您暗示在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)
Run Code Online (Sandbox Code Playgroud)

就其价值而言,您确实不必在调用之前设置所有变量find_package()。您只需要按照GTEST_ROOT答案中的建议进行设置即可。