在linux系统中,编译命令是将源代码转换为可执行程序的核心工具,不同规模和类型的项目会使用不同的编译方式,掌握这些命令的使用是每个linux开发者的必备技能。

单文件编译命令使用
如果是单个源代码文件,最常用的是gcc命令,它是linux下默认的C语言编译器,也支持C++等其他语言的编译。
比如我们有一个简单的C语言文件test.c,内容如下:
#include <stdio.h>
int main() {
printf("hello linux compilen");
return 0;
}
直接执行以下命令就可以完成编译:
gcc test.c -o test
其中-o参数用来指定输出的可执行文件名称,这里生成的可执行文件就是test,执行./test就能运行程序。
常用的gcc参数还有这些:
-c:只编译不链接,生成目标文件.o-g:生成调试信息,方便使用gdb调试-Wall:开启所有常用警告提示,帮助发现代码问题-O2:开启二级优化,提升生成程序的运行效率
多文件项目手动编译
当项目有多个源代码文件时,手动逐个编译再链接也是可行的。比如我们有三个文件:main.c、func.c、func.h。
首先分别编译每个.c文件生成目标文件:
gcc -c main.c -o main.o gcc -c func.c -o func.o
然后将两个目标文件链接生成最终的可执行文件:
gcc main.o func.o -o app
这种方式适合文件数量较少的项目,文件多了手动操作会很繁琐,这时候就需要使用构建工具。
使用make命令编译
make是linux下常用的自动化构建工具,它通过读取Makefile文件中的规则来执行编译操作,适合中等规模的项目。
我们还是以上面的三个文件为例,编写Makefile内容如下:
# 最终生成的可执行文件
app: main.o func.o
gcc main.o func.o -o app
# main.o的编译规则
main.o: main.c func.h
gcc -c main.c -o main.o
# func.o的编译规则
func.o: func.c func.h
gcc -c func.c -o func.o
# 清理编译产物的规则
clean:
rm -f *.o app
编写好Makefile之后,直接在终端执行make命令就能自动完成编译,执行make clean就能清理所有编译生成的文件。
使用cmake命令编译
对于大型跨平台项目,更推荐使用cmake,它通过CMakeLists.txt文件生成对应平台的构建文件,再配合make等工具完成编译。
还是以上面的三个文件为例,编写CMakeLists.txt内容如下:
# 指定cmake最低版本 cmake_minimum_required(VERSION 3.10) # 项目名称 project(test_project) # 指定生成的可执行文件和目标源文件 add_executable(app main.c func.c)
然后在项目目录下执行以下命令完成编译:
# 创建构建目录,避免编译文件污染源码目录 mkdir build cd build # 生成Makefile cmake .. # 执行编译 make
编译完成后,可执行文件app会生成在build目录下。
常见问题说明
如果执行编译命令时提示命令不存在,需要先安装对应的工具,比如安装gcc和make可以执行:
# Ubuntu/Debian系统 sudo apt install gcc make # CentOS/RHEL系统 sudo yum install gcc make
如果编译时出现头文件找不到的错误,可以通过-I参数指定头文件搜索路径,比如gcc -I ./include test.c -o test,表示在./include目录下搜索头文件。
如果链接时出现库文件找不到的错误,可以通过-L指定库文件路径,-l指定库名称,比如链接数学库可以加上-lm参数。