使用cmake构建项目编译和交叉编译工具链的设置

前言

一般编译项目时会通过编写makefile文件,使用make命令来完成。但是makefile文件编写较为麻烦,所以采用cmake方式自动生成makefile文件,这样我们可以更加关注项目树的构成和编排,省去了编写makefile的时间。

1.项目构成

首先看一下项目构成:
book@100ask:~/nfs_rootfs/v4l2/6th_240609/video_real_time$
项目
一级目录为工程目录video_real_time,最初只有include和src两个字目录,分别包含了头文件和源文件。子目录下的文件构成如下,先忽略掉cmake文件。

2.CMAKE文件编写

根目录的CMakeLists.txt文件

我们在根目录下创建CMakeLists.txt文件。根目录的CMakeLists.txt文件主要完成以下任务:

  • 设置最低版本要求
    • cmake_minimum_required(VERSION 3.8)
  • 项目名称
    • project(video_real_time)
    • 这里的项目名称就是一级目录名字
  • 交叉编译连的设置
    set(CMAKE_SYSTEM_NAME Linux)
    set(CMAKE_SYSTEM_PROCESSOR arm)
    # 交叉编译工具链的前缀
    set(CMAKE_C_COMPILER "已安装的交叉编译工具链的绝对路径")//gcc
    set(CMAKE_CXX_COMPILER "已安装的交叉编译工具链的绝对路径")//g++
    # 另外一种组合路径写法
    set(CROSS_CHAIN_PATH /home/book/xxx/ToolChain/xxx)
    set(CMAKE_C_COMPILER "${CROSS_CHAIN_PATH}/arm-xxx-gcc")//gcc
    set(CMAKE_CXX_COMPILER "${CROSS_CHAIN_PATH}/arm-xxx-g++")//g++
    
    
    • 如果最后编译的可执行程序需要放到ARM平台上运行,那么就要设置交叉编译工具链,否则不需要。
  • 添加头文件搜索路径
    include_directories(${PROJECT_SOURCE_DIR}/include)
    include_directories(${PROJECT_SOURCE_DIR}/include/convert)
    include_directories(${PROJECT_SOURCE_DIR}/include/display)
    include_directories(${PROJECT_SOURCE_DIR}/include/render)
    include_directories(${PROJECT_SOURCE_DIR}/include/video)
    
    根据自己的文件构成去写。
  • 生成的可执行文件目录
    set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
    
    创建bin目录存放可执行程序
  • 加载到子目录src
    add_subdirectory(src)
    
    到子目录下执行CMakeLists.txt文件

子目录下的CMakeLists.txt文件

我们在子目录src下创建CMakeLists.txt文件。子目录的CMakeLists.txt文件主要完成以下任务:

  • 当前目录下所有源文件生成SRC_LIST
    aux_source_directory(. SRC_LIST)
    
    SRC_LIST是自己起的名字
  • 当前目录下的子目录下的源文件生成xxx_LIST
    aux_source_directory(./convert CONVERT_LIST)
    aux_source_directory(./display DISPLAY_LIST)
    aux_source_directory(./render RENDER_LIST)
    aux_source_directory(./video VIDEO_LIST)
    
    注意前缀变成了./
  • 生成可执行文件xxx 由SRC_list变量和xxx_LIST定义的源文件共同编译而来
    add_executable(xxx ${SRC_LIST} ${CONVERT_LIST} ${DISPLAY_LIST} ${RENDER_LIST} ${VIDEO_LIST})
    
    xxx为可执行文件的名称,在之前的设置中已经指定了它的文件目录
    • 链接必要的库
    target_link_libraries( 可执行文件名称 lib1 lib2 ... )
    
    库名称不带l, 比如target_link_libraries(chatserver pthread muduo )

3.编译

在build目录中存放makefile相关的文件,是为了不污染项目的整体目录,使文件的存放有序合理,条目清晰。

mkdir build
cd ./build
cmake ..
make

依次执行上述命令,就能完成整个项目的编译。

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
交叉编译一个 CMake 项目,你需要先设置正确的编译器和工具,并且为目标平台配置正确的编译选项。下面是一个基本的步骤: 1. 安装交叉编译工具:根据你的目标平台,安装对应的交叉编译工具。这通常会包括交叉编译器、交叉编译的库和头文件。你可以从工具提供商或者平台官方网站下载。 2. 配置 CMakeLists.txt:打开你的 CMakeLists.txt 文件,添加交叉编译相关的配置。在你的项目中,你可能需要设置 CMAKE_C_COMPILER、CMAKE_CXX_COMPILER 变量为交叉编译器的路径。 ``` set(CMAKE_C_COMPILER /path/to/cross/compiler) set(CMAKE_CXX_COMPILER /path/to/cross/compiler) ``` 3. 创建一个构建目录:在你的项目根目录下创建一个用于构建项目的目录。 ``` mkdir build cd build ``` 4. 运行 CMake:在构建目录中运行 CMake 命令,指定正确的工具和其他选项。 ``` cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/toolchain.cmake .. ``` 这里的 /path/to/toolchain.cmake 是你下载的交叉编译工具提供的配置文件。该文件描述了交叉编译所需的工具信息。 5. 构建项目:运行 make 命令来构建项目。 ``` make ``` 6. 运行生成的可执行文件:在构建目录中找到生成的可执行文件,并将其拷贝到目标平台上运行。 这些步骤是一个基本的指南,具体的步骤可能因你的项目和目标平台的不同而有所不同。记得查阅交叉编译工具和平台的文档以获取更详细的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值