当前位置:   article > 正文

Linux cmake 初窥【2】

Linux cmake 初窥【2】

1.开发背景

        基于上一篇的基础上,再次升级

2.开发需求

        基于 cmake 指定源文件目录可以是多个文件夹,多层目录

3.开发环境

        ubuntu 20.04 + cmake-3.23.1

4.实现步骤

4.1 准备源码文件

工程目录如下

顶层脚本 compile.sh 负责执行 cmake 操作,顶层的 CMakeLists.txt 很关键,指定了源文件路径,其中每个文件夹中都放置了一个CMakeLists.txt 文件,语法要求,否者会报错。

顶层 CMakeLists.txt

  1. # Top 顶层 Cmake
  2. cmake_minimum_required(VERSION 2.8.11)
  3. # 添加子路径 cmake 执行调用对应子路径的 cmake
  4. add_subdirectory(./src)
  5. add_subdirectory(./src/func1/)
  6. add_subdirectory(./src/func2/)
  7. # 编译过程打印信息
  8. message("top cmake show message") # 打印信息
  9. #message(SEND_ERROR "Error Show") # 打印错误信息 可以显示当前位置行数
  10. # 定义工程名 暂时未见起作用
  11. project(projectName)
  12. # 指定编译工具 X86 还是 ARM
  13. #SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
  14. set(CMAKE_CXX_COMPILER g++)
  15. # 指定源代码文件目录别称
  16. set(SRC_DIR ${PROJECT_SOURCE_DIR}/src)
  17. set(SRC_FUNC1_DIR ${PROJECT_SOURCE_DIR}/src/func1)
  18. set(SRC_FUNC2_DIR ${PROJECT_SOURCE_DIR}/src/func2)
  19. # 指定生成的可执行文件名
  20. set(EXE_FILE_NAME mainFile)
  21. # 添加 include 包含路径 否则在源代码中引用头文件需要指定完整路径
  22. include_directories(${PROJECT_SOURCE_DIR})
  23. include_directories(${PROJECT_SOURCE_DIR}/src/func1/)
  24. include_directories(${PROJECT_SOURCE_DIR}/src/func2/)
  25. # 添加执行文件 1、多次调用 可以生成多个可执行文件
  26. add_executable(
  27. # 生成文件
  28. ${EXE_FILE_NAME}
  29. # main 函数所在目录
  30. ${SRC_DIR}/main.cpp
  31. # 测试功能文件夹1
  32. ${SRC_FUNC1_DIR}/func1.cpp
  33. # 测试功能文件夹2
  34. ${SRC_FUNC2_DIR}/func2.cpp
  35. )

src CMakeLists.txt

  1. # src Cmake
  2. cmake_minimum_required(VERSION 2.8.11)
  3. # 编译过程打印信息
  4. message("src cmake show message") # 打印信息

func1 CMakeLists.txt

  1. # func1 Cmake
  2. cmake_minimum_required(VERSION 2.8.11)
  3. # 编译过程打印信息
  4. message("func1 cmake show message") # 打印信息

func2 CMakeLists.txt

  1. # func2 Cmake
  2. cmake_minimum_required(VERSION 2.8.11)
  3. # 编译过程打印信息
  4. message("func2 cmake show message") # 打印信息

main.c

  1. #include <stdio.h>
  2. #include "func1.h"
  3. #include "func2.h"
  4. int main(int argc, char* argv[])
  5. {
  6. printf("%s hello cmake\r\n", __func__);
  7. /* 外调文件功能 */
  8. Func1_Test();
  9. Func2_Test();
  10. return 0;
  11. }

func 中的函数就是 Func_Test(); 和 Func2_Test(); ,这里就不展示了

4.2 准备编译脚本

compile.sh 文件如下:

  1. #!/bin/bash
  2. echo "compile file"
  3. if [ ! -d "./build/" ]; then
  4. # 没有文件夹 创建文件夹
  5. echo "no build direct"
  6. mkdir build
  7. else
  8. # 存在文件夹 删除文件夹内容
  9. echo "already build direct"
  10. rm ./build/* -r
  11. fi
  12. cmake -B build

4.3 执行编译脚本

./compile.sh

4.4 编译程序

执行 make 

  1. cd build
  2. make

4.5 运行程序

执行可执行程序

./mainFile

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/554691
推荐阅读
相关标签
  

闽ICP备14008679号