1.开发背景
基于上一篇的基础上,再次升级
2.开发需求
基于 cmake 指定源文件目录可以是多个文件夹,多层目录
3.开发环境
ubuntu 20.04 + cmake-3.23.1
4.实现步骤
4.1 准备源码文件
工程目录如下

顶层脚本 compile.sh 负责执行 cmake 操作,顶层的 CMakeLists.txt 很关键,指定了源文件路径,其中每个文件夹中都放置了一个CMakeLists.txt 文件,语法要求,否者会报错。
顶层 CMakeLists.txt
# Top 顶层 Cmake
cmake_minimum_required(VERSION 2.8.11)
# 添加子路径 cmake 执行调用对应子路径的 cmake
add_subdirectory(./src)
add_subdirectory(./src/func1/)
add_subdirectory(./src/func2/)
# 编译过程打印信息
message("top cmake show message")               # 打印信息
#message(SEND_ERROR "Error Show")       # 打印错误信息 可以显示当前位置行数
# 定义工程名 暂时未见起作用
project(projectName)
# 指定编译工具 X86 还是 ARM
#SET(CMAKE_CXX_COMPILER    arm-linux-gnueabihf-g++)
set(CMAKE_CXX_COMPILER    g++)
# 指定源代码文件目录别称
set(SRC_DIR                             ${PROJECT_SOURCE_DIR}/src)
set(SRC_FUNC1_DIR               ${PROJECT_SOURCE_DIR}/src/func1)
set(SRC_FUNC2_DIR               ${PROJECT_SOURCE_DIR}/src/func2)
# 指定生成的可执行文件名
set(EXE_FILE_NAME               mainFile)
# 添加 include 包含路径 否则在源代码中引用头文件需要指定完整路径
include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_SOURCE_DIR}/src/func1/)
include_directories(${PROJECT_SOURCE_DIR}/src/func2/)
# 添加执行文件 1、多次调用 可以生成多个可执行文件
add_executable(
                                # 生成文件
                                ${EXE_FILE_NAME}
                                # main 函数所在目录
                                ${SRC_DIR}/main.cpp
                                # 测试功能文件夹1
                                ${SRC_FUNC1_DIR}/func1.cpp
                                # 测试功能文件夹2
                                ${SRC_FUNC2_DIR}/func2.cpp
                                )
 
src CMakeLists.txt
# src Cmake
cmake_minimum_required(VERSION 2.8.11)
# 编译过程打印信息
message("src cmake show message")               # 打印信息
 
func1 CMakeLists.txt
# func1 Cmake
cmake_minimum_required(VERSION 2.8.11)
# 编译过程打印信息
message("func1 cmake show message")             # 打印信息 
func2 CMakeLists.txt
# func2 Cmake
cmake_minimum_required(VERSION 2.8.11)
# 编译过程打印信息
message("func2 cmake show message")             # 打印信息
 
main.c
#include <stdio.h>
#include "func1.h"
#include "func2.h"
int main(int argc, char* argv[])
{
        printf("%s hello cmake\r\n", __func__);
        /* 外调文件功能 */
        Func1_Test();
        Func2_Test();
        return 0;
}
 
func 中的函数就是 Func_Test(); 和 Func2_Test(); ,这里就不展示了
4.2 准备编译脚本
compile.sh 文件如下:
#!/bin/bash
echo "compile file"
if [ ! -d "./build/" ]; then
        # 没有文件夹 创建文件夹
        echo "no build direct"
        mkdir build
else
        # 存在文件夹 删除文件夹内容
        echo "already build direct"
        rm ./build/* -r
fi
cmake -B build
 
4.3 执行编译脚本
./compile.sh 

4.4 编译程序
执行 make
cd build
make  

4.5 运行程序
执行可执行程序
./mainFile 



















