三相电机功率计算:从公式原理到工程选型实战
2026/6/7 14:30:23
当我们从简单的Hello World程序进阶到实际项目时,很快就会遇到多文件管理的问题。想象一下,一个项目有几十甚至上百个源文件,如何高效地管理和编译它们?今天我们就来深入探讨这个问题。
演示环境:使用vscode+ssh+ubuntu2204
环境搭建可参考上篇文章:https://mp.weixin.qq.com/s/b0Fz-vPzZ4J82dpPAcOfWw
让我们从一个简单的多文件项目开始,包含以下文件:
text
project/ ├── main.c ├── utils.c └── utils.hmain.c
c
#include <stdio.h> #include "utils.h" int main() { print_message(); return 0; }utils.c
c
#include <stdio.h> #include "utils.h" void print_message() { printf("Hello, World!\n"); }utils.h
c
#ifndef UTILS_H #define UTILS_H void print_message(); #endifbash
# 编译 main.c 生成 main.o gcc -c main.c -o main.o # 编译 utils.c 生成 utils.o gcc -c utils.c -o utils.o # 链接对象文件生成可执行文件 gcc main.o utils.o -o hellobash
gcc main.c utils.c -o hello问题场景:想象一个拥有1000个源文件的大型项目
该方案了解即可,实际会用到下文的cmake
bash
sudo apt install makemakefile
CC = gcc OBJS = main.o utils.o hello: $(OBJS) $(CC) $(OBJS) -o hello main.o: main.c $(CC) -c main.c -o main.o utils.o: utils.c utils.h $(CC) -c utils.c -o utils.o clean: rm -f $(OBJS) hellomakefile
CC = gcc SRCS = $(wildcard *.c) # 自动发现所有.c文件 OBJS = $(SRCS:.c=.o) # 将.c文件列表转换为.o文件列表 hello: $(OBJS) $(CC) $^ -o $@ %.o: %.c $(CC) -c $< -o $@ clean: rm -f $(OBJS) hello| 符号 | 含义 | 示例 |
|---|---|---|
$@ | 目标文件 | hello |
$< | 第一个依赖文件 | main.c |
$^ | 所有依赖文件 | main.o utils.o |
$? | 比目标更新的依赖文件 | 修改过的文件 |
%.o | 通配符,匹配所有.o文件 | main.o utils.o |
使用方式:
bash
make # 编译项目 make clean # 清理生成的文件Makefile的局限性:
CMake的优势:
本文使用cmake3.15版本,Ubuntu2204作为演示:
下面命令行下载如果太慢或者下载失败可使用网盘下载: https://pan.baidu.com/s/17EcN_57zwG8vDtPLGx0I8g?pwd=t74k 提取码: t74k
另外之所以不用包管理器直接安装比如:sudo apt install cmake,是因为此命令安装的版本很旧,编译时可能会出问题
bash
# 下载CMake wget https://cmake.org/files/v3.15/cmake-3.15.3-Linux-x86_64.tar.gz # 解压 tar -xzvf cmake-3.15.3-Linux-x86_64.tar.gz -C /home/hutter/work/ # 配置环境变量 echo 'export PATH=/home/hutter/work/cmake-3.15.3-Linux-x86_64/bin:$PATH' >> ~/.bashrc source ~/.bashrc # 验证安装 cmake --version注意上面的本地路径要换成自己的文件路径
bash
# 问题1:找不到make sudo apt install make # 问题2:找不到C++编译器 sudo apt install g++cmake
# 指定CMake最低版本 cmake_minimum_required(VERSION 3.1.5) # 定义项目名称和语言 project(hello C) # 添加可执行文件 add_executable(hello main.c utils.c)cmake
cmake_minimum_required(VERSION 3.1.5) project(hello C) # 自动发现当前目录所有源文件 aux_source_directory(. SRCS) # 生成可执行文件 add_executable(hello ${SRCS})上面两种二选一即可
bash
# 1. 创建构建目录(推荐做法) mkdir build cd build # 2. 生成Makefile cmake .. # 3. 编译项目 make # 4. 运行程序 ./hello对于更复杂的项目,推荐这样的结构:
text
my_project/ ├── CMakeLists.txt ├── include/ │ └── utils.h ├── src/ │ ├── main.c │ └── utils.c └── build/ # 编译输出目录| 阶段 | 手动编译 | Makefile | CMake |
|---|---|---|---|
| 添加新文件 | 修改编译命令 | 修改Makefile | 自动发现或简单添加 |
| 编译 | 输入复杂命令 | make | cmake && make |
| 清理 | 手动删除文件 | make clean | make clean |
| 跨平台 | 需要重写命令 | 需要调整 | 自动适配 |
核心要点回顾:
CMakeLists.txt的基本语法就足够应对大多数项目实用建议: