cmake - 能够使用 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()
所以,这是我的问题:
- 为什么我编写的那段代码没有按照我的想法去做?
- 如何
find_library()
在提供的代码示例中工作? - 如果没有人能找到上述问题的解决方案,我还有什么其他方法可以获得我刚刚链接的库的路径,而
target_link_libraries()
不是find_library()
这样简单?
谢谢!
解决方案
推荐阅读
- swift - 用部分确定枚举大小写
- javascript - Javascript:使用对象作为命名空间,并且在命名空间内构造对象期间无法访问属性
- c# - 使用 lambda 表达式 C# 从表中获取特定行号
- c# - MVC 忽略 web.config 中的文化设置
- javascript - 使用 .css("background-color") 的 jQuery 突出显示文本不起作用
- python - Python - 将 title() 函数应用于列中的值
- python - iwconfig 对使用 crontab @reboot 启动的进程不可用?
- c# - 从包括空格在内的单行中读取字符,而不是从新行中读取字符
- anaconda - 安装包后,Conda 需要 20 多分钟才能解决环境问题
- spring - 验证 Webflux ReactiveMongo