为什么我调用CMake的find_library命令找到的路径是错误的?

pbpqsu0x  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(255)

我试图在我的CMakeLists.txt中包含一个库,就像我在其他机器上有doe一样,但在这台机器上找到的路径是错误的。
我的CMake代码:

message("Host system: ${CMAKE_HOST_SYSTEM_PROCESSOR}")
if (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "aarch64")
  find_library(libCubeEye NAMES libCubeEye.so HINTS thirdparty/aarch64/libcubeeye/lib/)
elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64")
  if(UNIX)
    find_library(libCubeEye NAMES libCubeEye.so HINTS thirdparty/x86_64/libcubeeye/lib)
  endif(UNIX)
  if(WIN32)
    find_library(libCubeEye NAMES libCubeEye.lib HINTS thirdparty/x86_64/libcubeeye/lib)
  endif(WIN32)
endif()
message(${libCubeEye})

if (NOT libCubeEye)
  message(FATAL_ERROR "libCubeEye library not found")
endif()

字符串
我正在使用的系统是x86_64,但找到的路径是:/home/path_to_my_src/thirdparty/libcubeeye/lib/libCubeEye.so当它看起来应该是这样的:/home/path_to_my_src/thirdparty/x86_64/libcubeeye/lib/libCubeEye.so表示排除CMAKE_HOST_SYSTEM_PROCESSOR。它找到的目录也不存在。
另外,当我试图使我得到错误:*** No rule to make 'thirdparty/libcubeeye/lib/libCubeEye.so', needed by 'bin/main'. Stop.哪一个有意义给予了它找到的错误路径

vngu2lb8

vngu2lb81#

这可能是由于缓存以及自最后一个缓存值被持久化以来发生的移动。
调用find_filefind_libraryfind_packagefind_pathfind_program等函数的结果会缓存它们在CMake Cache(构建目录中的CMakeCache.txt文件)中找到的结果(可能是出于性能优化的原因)。如果您想深入了解CMake中的变量缓存,请参阅the corresponding chapter of "Mastering CMake"和CMake语言参考文档中关于缓存变量的简要部分。除find_package外,所有这些命令都接受NO_CACHE参数以防止缓存。
运行“clean build”命令没有(?)对CMake缓存的影响。如果你想编辑该高速缓存,你可以用--fresh重新运行配置(如果你安装了CMake 3.24+),或者如果你想手动编辑缓存变量,你可以使用一个缓存编辑器程序,比如一个捆绑的交互式对话框(之后你需要重新运行配置,根据更新的缓存变量生成一个buildsystem)。

相关问题