从CMake 2.8.x迁移到3.2.x时出现以下问题。因此,似乎find_library
的内部行为发生了变化。这是一个演示我的问题的最小例子。
请考虑我们正在搜索名为libopenblas.so
的库,该库位于/scratch/local_install/lib
和/usr/lib/openblas-base
。 LD_LIBRARY_PATH
环境变量设置为/scratch/local_install/lib
。
CMakeLists.txt
文件如下:
PROJECT(TEST)
cmake_minimum_required(VERSION 2.8)
SET(_libname "openblas")
SET(_libdir ENV LD_LIBRARY_PATH "/usr/lib/openblas-base")
find_library(OPENBLAS_LIBRARY
NAMES ${_libname}
HINTS ${_libdir}
PATHS ${_libdir}
)
MESSAGE("OPENBLAS: ${OPENBLAS_LIBRARY}")
如果我使用CMake 2.8.7或2.8.12执行此操作,我会
OPENBLAS: /scratch/koehlerm/local_install/lib/libopenblas.so
如果我使用CMake 3.2.1配置代码,我会
OPENBLAS: /usr/lib/openblas-base/libopenblas.so
如果libopenblas.so
中没有LD_LIBRARY_PATH
,我只想获得。即使使用CMake 3.2.x配置代码,如何恢复CMake 2.8.x的旧行为?
答案 0 :(得分:1)
对NO_DEFAULT_PATH
使用find_library
,然后它会忽略默认位置。请参阅documentation。
要获得所需的行为,请使用find_library两次。首先使用NO_DEFAULT_PATH,然后不使用。如果第一次找到它,则缓存结果并跳过包含默认路径的第二个调用。如果没有找到任何内容,它将重新运行并查看默认路径。