温馨提示×

ubuntu gcc怎样多文件编译

小樊
39
2026-10-04 01:53:10
栏目: 智能运维

在 Ubuntu 下使用 gcc 进行多文件编译,常见有以下几种方式。下面用示例一步步说明。


一、示例文件结构

假设有如下三个文件:

.
├── main.c
├── func.c
└── func.h

func.h

#ifndef FUNC_H
#define FUNC_H

void hello();

#endif

func.c

#include <stdio.h>
#include "func.h"

void hello() {
    printf("Hello from func.c\n");
}

main.c

#include "func.h"

int main() {
    hello();
    return 0;
}

二、方法一:直接多文件编译(最常用)

gcc main.c func.c -o app

运行:

./app

✅ 适合文件较少的情况


三、方法二:先编译成目标文件(推荐)

1. 编译为目标文件(.o)

gcc -c main.c -o main.o
gcc -c func.c -o func.o

2. 链接目标文件

gcc main.o func.o -o app

运行:

./app

✅ 修改某个文件时只需重新编译该文件


四、方法三:使用 Makefile(工程化)

创建 Makefile:

CC = gcc
TARGET = app
OBJS = main.o func.o

$(TARGET): $(OBJS)
	$(CC) $(OBJS) -o $(TARGET)

%.o: %.c
	$(CC) -c $< -o $@

clean:
	rm -f $(OBJS) $(TARGET)

使用:

make
./app
make clean

✅ 适合中大型项目


五、常见错误

1. 忘记包含头文件

// main.c
#include "func.h"   // 必须

2. 重复定义

  • 函数定义只能在一个 .c 文件中
  • 头文件只写声明

3. 找不到头文件

gcc main.c func.c -I./include -o app

六、总结

方式 命令示例 适用场景
直接编译 gcc a.c b.c -o app 小项目
目标文件 gcc -c + gcc *.o 常用
Makefile make 工程化

如果你有 具体项目结构 或 编译报错信息,可以贴出来,我可以直接帮你改。

0 踩