如何避免在 cmake 中自动链接 Qt5 库?

Posted

技术标签:

【中文标题】如何避免在 cmake 中自动链接 Qt5 库?【英文标题】:how avoid automatic linking of Qt5 libraries in cmake? 【发布时间】:2020-05-04 21:56:28 【问题描述】:

我打算编译如下opencv代码:

#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char** argv )

   printf("hello world \n");
   return 0;

我的 CMakeLists.txt 如下:

cmake_minimum_required(VERSION 2.8)
find_package( OpenCV REQUIRED )
project( main )
add_executable(main main.cpp )
target_link_libraries( main $OpenCV_LIBS )

编译后的结果如下:

[ 50%] Building CXX object CMakeFiles/main.dir/main.cpp.o
[100%] Linking CXX executable main
/usr/bin/ld: cannot find -lQt5::Core
/usr/bin/ld: cannot find -lQt5::Gui
/usr/bin/ld: cannot find -lQt5::Widgets
/usr/bin/ld: cannot find -lQt5::Test
/usr/bin/ld: cannot find -lQt5::Concurrent
/usr/bin/ld: cannot find -lQt5::OpenGL
collect2: error: ld returned 1 exit status
CMakeFiles/main.dir/build.make:143: recipe for target 'main' failed
make[2]: *** [main] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/main.dir/all' failed
make[1]: *** [CMakeFiles/main.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

我相信 CMake 以自动方式包含 Qt5 库,我想知道如何避免这种情况。

【问题讨论】:

【参考方案1】:

CMake 的理念是从不添加不需要的东西。 Qt 库可能已添加到 CMake 的配置列表中。

它们可能出现在您使用的标准变量中。您可以通过

打印内容
message(STATUS "OpenCV_LIBS = $OpenCV_LIBS") 

配置文件看起来 OpenCVConfig.cmake.in 并且可能包含由于某种原因被更改的其他文件。

【讨论】:

以上是关于如何避免在 cmake 中自动链接 Qt5 库?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CMake 自动链接 boost 库

Qt5 CMake 将所有库包含到可执行文件中

CMake 链接 Qt5::Svg 但 QImageReader 看不到

CMake:如何避免 HDF5 系统和 conda 安装中的不匹配?

OpenCV2.4.9 With Qt5.3.1 开发环境配置问题解决篇

初步编译QT5.15.2+VS2019+VTK8.2.0