CMake:包括外部库头文件

Posted

技术标签:

【中文标题】CMake:包括外部库头文件【英文标题】:CMake: include external library headers 【发布时间】:2019-06-24 13:41:40 【问题描述】:

我有这个 sn-p,它工作正常:

find_package(Qt5 COMPONENTS Core REQUIRED)
target_link_libraries( myproj Qt5::Core )
target_include_directories( myproj PRIVATE $Qt5Core_INCLUDE_DIRS )

因为我想使用Qwt。现在我运行find_library( LIB_qwt qwt ) 并轻而易举地获得.so 的路径。但是如何获取标题路径并将其添加到target_include_directories()

我真的需要手动包含 Qt 吗?如果我不这样做(但我以一种丑陋的方式包含 Qwt 文件)Qwt 的标头会通过不发现 Qt 来破坏编译。

这是我的 Qwt 安装:libqwt-qt5-dev

【问题讨论】:

我会使用这个FindQwt.cmake 文件,然后这样做:target_link_libraries( myproj PRIVATE Qt5::core qwt::qwt )。而且你不需要做target_include_directories(...),因为包含目录是在Qt5::core目标中声明的。 @kanstar 在我的项目中用作复制粘贴吗? 通常您会将该文件包含到您的项目中。将该文件添加到项目树中的目录中,例如cmake/Modules 并将该路径添加到主 CMakeLists.txt 中的 CMAKE_MODULE_PATH 中,例如 list(APPEND CMAKE_MODULE_PATH "$CMAKE_CURRENT_LIST_DIR/cmake/Modules") 当然,在使用target_link_libraries(...)之前,你必须先做find_package( Qwt ) @kanstar 它使用了类似的 cmake file。 【参考方案1】:

您应该可以在find_library( LIB_qwt qwt ) 之后将$LIB_qwt_INCLUDE_DIR$QWT_INCLUDE_DIR 添加到target_include_directories。您必须手动包含 Qt。

如果这不起作用,您可以自己搜索路径,您可以像这样使用find_path

find_path(QWT_INCLUDE_DIR qwt.h)
target_include_directories( myproj PRIVATE $Qt5Core_INCLUDE_DIRS $QWT_INCLUDE_DIR)

qwt.h 显然必须在路径上的某处。

【讨论】:

以上是关于CMake:包括外部库头文件的主要内容,如果未能解决你的问题,请参考以下文章

[An Introduction to GCC 学习笔记] 06 链接外部库头文件

QtCreator里添加外部第三库头文件路径的方法(.pro文件)

使用外部附加头文件构建 cmake 对象库

基础知识

预编译标准库头文件 - C++

在 CLion 和 Cmake 中设置外部头文件和链接器库的问题 [重复]