使用 CMake 和 Shell 脚本简化 C/C++ 项目的编译流程

在日常 C/C++ 开发中,频繁手动配置构建命令既繁琐又容易出错。本文将介绍如何结合 CMake 和 Shell 脚本,搭建一个轻量级的自动构建环境,支持递归编译多个 .c / .cpp 文件,提升开发效率。

🧱 项目结构

我们的项目组织形式如下:

project-root/
├── src/
│ ├── main.c
│ └── utils/helper.cpp
├── build/ # 构建目录
└── setup.sh # 初始化脚本

🛠️ 自动构建脚本(setup.sh)

我们通过一个 setup.sh 脚本来自动完成以下任务:

  1. 检查当前目录及子目录是否包含 C/C++ 源文件;
  2. 自动创建 build/ 目录;
  3. 生成 CMakeLists.txt
  4. 生成 run 构建脚本并执行。
#!/bin/bash

# 获取当前目录
CURRENT_DIR=$(pwd)

# 递归检查是否有 .c / .cpp 文件
if ! find . -type f \( -name "*.c" -o -name "*.cpp" \) | grep -q .; then
    echo "No C/C++ source files found in this directory or subdirectories."
    exit 1
fi

# 构建目录
BUILD_DIR="$CURRENT_DIR/build"
mkdir -p "$BUILD_DIR"

# 生成 CMakeLists.txt
cat > "$BUILD_DIR/CMakeLists.txt" <<EOF
cmake_minimum_required (VERSION 3.0)
project (demo0)

file(GLOB_RECURSE SRC_LIST ../*.c ../*.cpp)

# 排除 CMake 中间文件
foreach(FILE \${SRC_LIST})
    string(FIND \${FILE} "CMakeFiles" FOUND)
    if(NOT \${FOUND} EQUAL -1)
        list(REMOVE_ITEM SRC_LIST \${FILE})
    endif()
endforeach()

add_executable(main \${SRC_LIST})
EOF

# 生成构建脚本
cat > "$BUILD_DIR/build.sh" <<EOF
#!/bin/bash
cd "\$(dirname "\$0")" || exit 1

cmake .
make

if [ -f "./main" ]; then
    echo "Compile SUCCESSFULLY, EXECUTING..."
    ./main
else
    echo "FAIL"
fi
EOF

# 可执行权限
chmod +x "$BUILD_DIR/build.sh"

echo "Build setup complete."

# 执行构建
./build/build.sh

🔧 配置环境变量

为方便长期使用,可以将该脚本所在路径加入环境变量:
将脚本文件放入指定目录如:

$ ls ~/scripts/
run

配置环境变量:

sudo echo 'export PATH=$PATH:~/scripts' >> ~/.bashrc

这样你只需在项目目录下运行:

run

即可完成编译和执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值