以下这些操作都可以共用一条 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
源文件中),因此编译运行项目时,我们只需要提供所有的源文件即可,不需要处理头文件。