能够使用target_link_libraries查找Qt5库,但不能使用find_library查找Qt5库。是什么赋予了?

时间:2019-07-17 14:02:31

标签: cmake qt5

在尝试更改某些现有代码时,我注意到了一个奇怪的行为。我注意到的是,我们调用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()语句中解析出来,并且{ {1}}由于某种原因而无法执行。

所以,这是我的问题:

  1. 为什么我编写的那段代码没有按照我的预期去做?
  2. 如何在提供的代码示例中使find_library()工作?
  3. 如果没有人能找到上述解决方案,那么除了find_library()之外,我还能通过什么其他方法获得刚刚与target_link_libraries()链接的库的路径?

谢谢!

0 个答案:

没有答案