CMake配置工程链接库

本文介绍了在CMake中链接C/C++库的三种方法:find_package、find_path & find_library以及FindPkgConfig。find_package是CMake内置的库查找命令,find_path和find_library用于查找头文件和库文件,而FindPkgConfig则是利用pkg-config工具来定位库。每种方法都有其适用场景和使用细节。

CMake是一款优秀的C/C++项目构建工具。而C/C++项目经常使用一些第三方库,如boost、luajit等。而在CMake下大致有3种方式将C/C++库引入工程。

find_package

find_package是CMake原生使用的库查找命令。使用方式如下

find_package(Boost REQUIRED)
find_package(SDL2 REQUIRED)
if(Boost_FOUND) #这些变量的名称没有标准,去CMakeCache.txt里看产生什么变量。
 message(STATUS "found boost")
endif()
include_directories(${Boost_INCLUDE_DIRS}) #这个类型变量肯定会有,头文件目录
target_link_libraries(CruleEngine "${SDL2_IMAGE_LIBRARY}") #这是库的位置 ​

这个查找主要是在unix下起作用,在windows下几乎没用。它是其实

在 Linux 环境下使用 CMake 配置 Qt 工程链接动态,需要完成以下几个核心步骤: ### 1. 编写 `CMakeLists.txt` 文件 这是 CMake 构建系统的核心文件,用于定义项目结构、依赖和构建规则。一个典型的 Qt 工程的 `CMakeLists.txt` 文件应包括以下内容: ```cmake # 设置 CMake 最低版本 cmake_minimum_required(VERSION 3.10) # 设置项目名称 project(MyQtProject) # 查找 Qt5 的组件 find_package(Qt5 COMPONENTS Widgets REQUIRED) # 设置源文件 set(SOURCES main.cpp mainwindow.cpp ) set(HEADERS mainwindow.h ) # 添加可执行文件目标 add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS}) # 链接 Qt5Widgets target_link_libraries(${PROJECT_NAME} Qt5::Widgets) ``` 上述代码片段中,`find_package(Qt5 COMPONENTS Widgets REQUIRED)` 用于查找 Qt5 的 Widgets 模块,`target_link_libraries` 则用于将可执行文件与 Qt5Widgets 动态链接起来[^1]。 ### 2. 使用 `pkg-config` 链接非 Qt 的动态 如果项目中还需要链接非 Qt 的动态(如第三方),可以通过 `pkg-config` 工具来获取编译和链接参数。例如,假设需要链接 `libpng` 动态,可以修改 `CMakeLists.txt` 文件如下: ```cmake # 查找 libpng find_package(PkgConfig REQUIRED) pkg_check_modules(LIBPNG REQUIRED libpng) # 包含头文件 include_directories(${LIBPNG_INCLUDE_DIRS}) # 链接动态 target_link_libraries(${PROJECT_NAME} ${LIBPNG_LIBRARIES}) ``` 这样可以确保 CMake 正确地找到并链接所需的动态[^3]。 ### 3. 使用 `ccmake` 或 `cmake-gui` 设置编译选项 在实际开发过程中,可能需要根据具体需求调整编译选项,例如指定构建类型(Debug/Release)或更改安装路径。可以使用 `ccmake` 或 `cmake-gui` 工具进行交互式配置: ```bash mkdir build cd build ccmake .. ``` 通过这种方式可以方便地修改 CMake 缓存变量,例如 `CMAKE_BUILD_TYPE`、`CMAKE_INSTALL_PREFIX` 等[^5]。 ### 4. 构建和安装 配置完成后,使用 `make` 命令进行编译,使用 `make install` 安装生成的可执行文件或文件: ```bash make make install ``` 如果项目中包含多个构建配置(如 Debug 和 Release),建议为每种配置创建单独的构建目录,以避免冲突[^5]。 ### 示例:完整 `CMakeLists.txt` 文件 以下是一个完整的 `CMakeLists.txt` 文件示例,展示了如何配置 Qt 工程链接动态: ```cmake cmake_minimum_required(VERSION 3.10) project(MyQtApp) # 查找 Qt5 find_package(Qt5 COMPONENTS Widgets REQUIRED) # 查找 libpng find_package(PkgConfig REQUIRED) pkg_check_modules(LIBPNG REQUIRED libpng) # 源文件和头文件 set(SOURCES main.cpp mainwindow.cpp ) set(HEADERS mainwindow.h ) # 添加可执行文件 add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS}) # 链接 Qt 和 libpng target_link_libraries(${PROJECT_NAME} Qt5::Widgets ${LIBPNG_LIBRARIES}) # 包含 libpng 头文件 target_include_directories(${PROJECT_NAME} PRIVATE ${LIBPNG_INCLUDE_DIRS}) ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值