解决执行find

写的CMakeLists.txt里有这么一句:

find_package(PCL 1.8 REQUIRED COMPONENTS common io visualization)

在执行cmake 命令时报下面的错:

CMake Error at /usr/share/cmake-3.10/Modules/CMakeFindDependencyMacro.cmake:48 (find_package):

  Found package configuration file:

    /root/anaconda3/lib/cmake/Qt5WebKit/Qt5WebKitConfig.cmake

  but it set Qt5WebKit_FOUND to FALSE so package “Qt5WebKit” is considered to

  be NOT FOUND.  Reason given by package:

  Qt5WebKit could not be found because dependency is required to have exact

  version 5.15.x.

Call Stack (most recent call first):

  /usr/lib/x86_64-linux-gnu/cmake/Qt5WebKitWidgets/Qt5WebKitWidgetsConfig.cmake:86 (find_dependency)

  /usr/lib/cmake/vtk-6.3/Modules/vtkGUISupportQtWebkit.cmake:13 (find_package)

  /usr/lib/cmake/vtk-6.3/vtkModuleAPI.cmake:45 (include)

  /usr/lib/cmake/vtk-6.3/vtkModuleAPI.cmake:15 (vtk_module_load)

  /usr/lib/cmake/vtk-6.3/vtkModuleAPI.cmake:132 (_vtk_module_config_recurse)

  /usr/lib/cmake/vtk-6.3/VTKConfig.cmake:80 (vtk_module_config)

  /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:501 (find_package)

  /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:656 (find_VTK)

  /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake:847 (find_external_library)

  CMakeLists.txt:13 (find_package)

看了一下原因是我环境下有多个不同版本的cmake:

/usr/lib/x86_64-linux-gnu/cmake

/root/anaconda3/lib/cmake

对应有多个Qt5Webkit 配置文件, 而/usr/lib/x86_64-linux-gnu/cmake/Qt5WebKitWidgets/Qt5WebKitWidgetsConfig.cmake里第86行的代码是:

find_dependency(Qt5WebKit 5.212.0 EXACT )

就是这句话需要找Qt5WebKit 5.212.0,可它搜索的是

/root/anaconda3/lib/cmake/Qt5WebKit/Qt5WebKitConfig.cmake

实际上,应该找的是

/usr/lib/x86_64-linux-gnu/cmake/Qt5WebKit/Qt5WebKitConfig.cmake

实验了一些网上说的改变设置CMAKE_MODULE_PATH和cmake默认搜索的这些路径:

PATH

CMAKE_PREFIX_PATH

CMAKE_FRAMEWORK_PATH

CMAKE_APPBUNDLE_PATH

都没有效果!后实验找到了这些办法有效:

1.在

find_package(PCL 1.8 REQUIRED COMPONENTS common io visualization)

前增加:

include(CMakeFindDependencyMacro OPTIONAL RESULT_VARIABLE _CMakeFindDependencyMacro_FOUND)
find_dependency(Qt5WebKit 5.212.0 EXACT)

或者简单增加

find_package(Qt5WebKit)

或者设置 Qt5WebKit_DIR

set(Qt5WebKit_DIR /usr/lib/x86_64-linux-gnu/cmake/Qt5WebKit)

 都有效果,可以避免上面的报错,但是都有下面的可能不同版本可能存在冲突的警告:

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

    runtime library [libuuid.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [libfreetype.so.6] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [libz.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [libexpat.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [libpng16.so.16] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [libtiff.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [libsqlite3.so.0] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [libsz.so.2] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [libxml2.so.2] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [liblz4.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [libQt5OpenGL.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [libQt5Sql.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [libQt5WebKitWidgets.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [libQt5Widgets.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib

  Some of these libraries may not be found correctly.

CMake Warning at CMakeLists.txt:76 (add_executable):
  Cannot generate a safe dependent library path for target gridcluster
  because files in some directories may conflict with libraries in implicit
  directories:

    runtime library [libQt5OpenGL.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [libQt5Sql.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib
    runtime library [libQt5WebKitWidgets.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
      /root/anaconda3/lib

  Some of these libraries may not be found correctly.


-- Generating done

这些警告可以忽略也可能需要重视,视情况而定,但是我为了避免混编进对不同版本的so库的引用,导致程序运行时可能会莫名其妙地崩溃(以前遇到过类似情况),我还是执行cmake时先暂时把/root/anaconda3/lib下的cmake目录整个移走(因为明显是anaconda3下的Qt5WebKit版本不符合要求),这样编译就能顺利地完成,没有任何报错或警告了。

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/e2d3194e4f.html