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 链接外部库头文件