将find_library行为从CMake 2.8更改为CMake 3.2

时间:2015-03-31 10:07:02

标签: cmake

从CMake 2.8.x迁移到3.2.x时出现以下问题。因此,似乎find_library的内部行为发生了变化。这是一个演示我的问题的最小例子。

请考虑我们正在搜索名为libopenblas.so的库,该库位于/scratch/local_install/lib/usr/lib/openblas-baseLD_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的旧行为?

1 个答案:

答案 0 :(得分:1)

NO_DEFAULT_PATH使用find_library,然后它会忽略默认位置。请参阅documentation

要获得所需的行为,请使用find_library两次。首先使用NO_DEFAULT_PATH,然后不使用。如果第一次找到它,则缓存结果并跳过包含默认路径的第二个调用。如果没有找到任何内容,它将重新运行并查看默认路径。