GCC 同时编译多个 C/C++ 文件

以下这些操作都可以共用一条 gcc 指令:

  • 将多个 C/C++ 源文件加工为汇编文件或者目标文件;
  • 将多个 C/C++ 源文件或者预处理文件加工为汇编文件或者目标文件;
  • 将多个 C/C++ 源文件、预处理文件或者汇编文件加工为目标文件;
  • 同一项目中,不同的源文件、预处理文件、汇编文件以及目标文件,可以使用一条 gcc 指令,最终生成一个可执行文件;

目录结构如下:

wohu@ubuntu:~/cpp/src$ tree ./
./
├── function.cpp
├── function.h
└── main.cpp

0 directories, 3 files
wohu@ubuntu:~/cpp/src$ 

function.cpp 内容

#include <iostream>

void greetings()
{
    std::cout << "hello,world" << std::endl;
}

function.h 内容

void greetings();

main.cpp 内容

#include <iostream>
#include "function.h"

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

1. 分步编译

先执行

g++ -c function.cpp  main.cpp 

再执行

g++ function.o main.o -o main

完整步骤如下:

wohu@ubuntu:~/cpp/src$ ls
function.cpp  function.h  main.cpp
wohu@ubuntu:~/cpp/src$ g++ -c function.cpp  main.cpp 
wohu@ubuntu:~/cpp/src$ ls
function.cpp  function.h  function.o  main.cpp  main.o
wohu@ubuntu:~/cpp/src$ g++ function.o main.o -o main
wohu@ubuntu:~/cpp/src$ ls
function.cpp  function.h  function.o  main  main.cpp  main.o
wohu@ubuntu:~/cpp/src$ ./main 
hello,world
wohu@ubuntu:~/cpp/src$ 

2. 一起编译

直接执行

g++ main.cpp function.cpp -o main

执行过程:

wohu@ubuntu:~/cpp/src$ ls
function.cpp  function.h  main.cpp
wohu@ubuntu:~/cpp/src$ 
wohu@ubuntu:~/cpp/src$ g++ main.cpp function.cpp -o main
wohu@ubuntu:~/cpp/src$ ls
function.cpp  function.h  main  main.cpp
wohu@ubuntu:~/cpp/src$ ./main 
hello,world
wohu@ubuntu:~/cpp/src$ 

如果一个项目中有十几个甚至几十个源文件,我们可以进入该项目目录,用 *.c 表示所有的源文件,即执行如下指令:

wohu@ubuntu:~/cpp/src$ ls
function.cpp  function.h  main.cpp
wohu@ubuntu:~/cpp/src$ g++ *.cpp -o main
wohu@ubuntu:~/cpp/src$ ls
function.cpp  function.h  main  main.cpp
wohu@ubuntu:~/cpp/src$ ./main 
hello,world
wohu@ubuntu:~/cpp/src$ 

注意,由于在程序预处理阶段,GCC 编译器会自行处理各个 .c/.c++ 文件内部引入的 .h 头文件(将 .h 文件中的代码直接拷贝到当前 .c 源文件中),因此编译运行项目时,我们只需要提供所有的源文件即可,不需要处理头文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wohu007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值