首页 > 解决方案 > 能够使用 target_link_libraries 找到 Qt5 库,但不能使用 find_library。是什么赋予了?

问题描述

尝试更改某些现有代码时,我注意到一个奇怪的行为。我注意到的是,我们调用target_link_libraries()并找到了一个没有问题的 Qt5 库,但调用find_library()没有找到相同的库。这是我的代码:

list(APPEND CMAKE_PREFIX_PATH ${QT_ROOT})
find_package(Qt5Widgets REQUIRED)
target_link_libraries(projectName Qt5::Widgets)
find_library(QTWIDGETSFOUND NAMES Qt5::Widgets)
message(STATUS ${QTWIDGETSFOUND})

结果是:

QTWIDGETSFOUND-NOTFOUND

但是,如果我查看生成的文件link.txt,我可以找到这一行:

/home/user/Documents/work/test/build/venv/.conan/data/Qt/5.11.3/org/dev/package/80043e232e8ab07f4b25e67652a9490d9ad33d91/lib/libQt5Widgets.so.5.11.3

我的结论是target_link_libraries()可以找到Qt5:Widgets图书馆,但find_library()不能。我觉得这种行为很奇怪。

我的用例是我想定位我的库,我做得很好,然后获取它找到的库的路径并将该库文件复制到某处。我找不到从中获取路径的方法target_link_libraries(),所以我想我会在find_library()之后调用以获取该库的路径并从那里复制它。我看到我的问题的唯一可能答案是这Qt5:Widgets不是库的实际名称,但可以从我上面所做的陈述target_link_libraries()中解决它,并且由于某种原因无法解决。find_package()find_library()

所以,这是我的问题:

  1. 为什么我编写的那段代码没有按照我的想法去做?
  2. 如何find_library()在提供的代码示例中工作?
  3. 如果没有人能找到上述问题的解决方案,我还有什么其他方法可以获得我刚刚链接的库的路径,而target_link_libraries()不是find_library()这样简单?

谢谢!

标签: cmakeqt5

解决方案


推荐阅读