我试图在我的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.
哪一个有意义给予了它找到的错误路径
1条答案
按热度按时间vngu2lb81#
这可能是由于缓存以及自最后一个缓存值被持久化以来发生的移动。
调用
find_file
、find_library
、find_package
、find_path
和find_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)。