CMake基础学习使用与Demo-第二篇

CMake学习后续

有了上一篇,基础的cmake使用配合IDE已经能完成基本的工作了,对于复杂的项目,一般还需要配合编译器做定制。

比如使用Boost库,CUDA,使用Qt框架,使用CMake编译嵌入式程序…

甚至可以考虑使用ctest指令完成代码的单元测试,或者install指令或者cpack制作安装脚本。还可以通过配置不同编译器,进行跨平台编译。

CMake目前支持的语言和领域都有了长足的进度,对于Python,Swift,C#等开始支持,对Git的submodule也支持良好,支持FetchContent一类的在线下载支持库等。

Cmake虽然复杂,但是在各个领域非常通用,对IDE配合良好,基础使用不需要太多知识,值得学习。先上手,遇到问题再去解决。

find_package 使用

参考链接: https://www.jianshu.com/p/a0915895dbbc

假设代码如下:

// test.cpp 
// 打印lzma库的版本号
// 依赖系统安装的的LibLZMA库
#include "lzma.h"
#include <iostream>

int main(int argc, char** argv)
{
    
    
    const char* version = lzma_version_string();
    std::cout << "lzma version is: " << version << std::endl;
    return 0;
}
  • 模块模式:
# CMakeLists.txt
find_package(LibLZMA MODULE) # MODULE指定使用模块模式查找
if (LibLZMA_FOUND)
    message("Find lzma library: ${LIBLZMA_INCLUDE_DIR}, ${LIBLZMA_LIBRARY}")
    include_directories(${LIBLZMA_INCLUDE_DIR})
    add_executable(test test.cpp)
    target_link_libraries(test ${LIBLZMA_LIBRARY})
endif()


# 命令行输出(只展示跟例子相关的输出)
Find lzma library: /usr/local/include, /usr/local/lib/liblzma.dylib

lzma version is: 5.2.5
  • 配置模式:
# lzmaConfig.cmake
set(lzma_INCLUDE_DIR "/usr/local/include")
set(lzma_LIBRARY "/usr/local/lib/liblzma.dylib")

# CMakeLists.txt
find_package(lzma CONFIG
    NAMES lzma
    PATHS ./)
if (lzma_FOUND)
    message("Find lzma library: ${lzma_INCLUDE_DIR}, ${lzma_LIBRARY}")
    include_directories(${lzma_INCLUDE_DIR})
    add_executable(test test.cpp)
    target_link_libraries(test ${lzma_LIBRARY})
endif()


# 命令行输出(只展示跟例子相关的输出)
Find lzma library: /usr/local/include, /usr/local/lib/liblzma.dylib

lzma version is: 5.2.5

参考的其他教程

  • 网上的教程版本都很老,CMake现代化的教程
    https://www.bookstack.cn/read/Modern-CMake-CN-Modern-CMake-zh_CN/08ad6f6237beace2.md

  • Qt Project CMake Support
    https://blog.csdn.net/A642960662/article/details/123077371
    https://blog.csdn.net/CUBE_lotus/article/details/128507180

  • STM32 CMake支持 《== (超级推荐)
    https://gitee.com/Matrixant/qtcreator_cmake_stm32_template/blob/master/CMakeLists.txt

  • ELF,BIN,HEX 格式区别
    https://zhuanlan.zhihu.com/p/359999550
    https://blog.csdn.net/weixin_42822110/article/details/96892793

  • 别人的CMake系列教程
    https://www.jianshu.com/p/71ba8e8646cc

猜你喜欢

转载自blog.csdn.net/bbdxf/article/details/128921044
今日推荐