查找通过CMakeLists拉入项目的库的版本

时间:2019-07-16 08:03:45

标签: c++ cmake

在由CMake配置的项目中,我使用了多个外部库(在此为“ A”)(它们又链接到其他库(在此为“ B”))。现在,在升级了这些辅助外部库(“ B”)之后,有时我忘记了升级初始外部库(“ A”)。这会导致在主项目的配置阶段出现错误/警告,例如

CMake Warning at CMakeLists.txt:416 (add_executable):
  Cannot generate a safe runtime search path for target TTM-equation because
  files in some directories may conflict with libraries in implicit
  directories:

    runtime library [libmkl_gnu_thread.so] in /opt/intel/mkl/lib/intel64 may be hidden by files in:
      /opt/intel/compilers_and_libraries_2019.0.117/linux/mkl/lib/intel64
    runtime library [libmkl_intel_lp64.so] in /opt/intel/mkl/lib/intel64 may be hidden by files in:
      /opt/intel/compilers_and_libraries_2019.0.117/linux/mkl/lib/intel64
    runtime library [libmkl_core.so] in /opt/intel/mkl/lib/intel64 may be hidden by files in:
      /opt/intel/compilers_and_libraries_2019.0.117/linux/mkl/lib/intel64
    runtime library [libmkl_intel_thread.so] in /opt/intel/mkl/lib/intel64 may be hidden by files in:
      /opt/intel/compilers_and_libraries_2019.0.117/linux/mkl/lib/intel64

  Some of these libraries may not be found correctly.

在这里,我有两个不同版本的intel MKL库作为辅助库,它们被不同的初始外部库引入,并且相互冲突。
为了找到拉入MKL库“旧”版本的罪魁祸首,我通常必须使用ldd浏览所有链接的库,并检查它们中的哪个正在拉入哪个版本的MKL库。 。这仅适用于少数几个外部库,但是一旦我拥有超过5个外部库,它就会变得烦人且耗时。
因此,有没有一种更简便的方法来检测有问题的库“ A”,而不必遍历所有包含的库?

0 个答案:

没有答案