以下是关于 gcc
和 g++
编译器常用的编译用法整理,包括各种参数的含义和脚本样例。
基本用法
单文件编译
gcc -o output_file source.c
g++ -o output_file source.cpp
-o output_file
:指定输出可执行文件的名称。
多文件编译
gcc -c file1.c
gcc -c file2.c
gcc -o output_file file1.o file2.o
-c
:仅编译,不链接,生成目标文件(.o
)。
连接系统库
gcc -o output_file source.c -lm
-lm
:链接数学库。
连接非系统库
gcc -o output_file source.c -L/path/to/lib -lname
-L/path/to/lib
:指定库路径。-lname
:链接名为libname.a
或libname.so
的库。
头文件包含路径
gcc -o output_file source.c -I/path/to/include
-I/path/to/include
:指定头文件搜索路径。
开启调试信息
gcc -g -o output_file source.c
-g
:生成调试信息,便于使用调试工具(如gdb
)。
编译优化
gcc -O2 -o output_file source.c
-O0
:无优化(默认)。-O1
:基本优化。-O2
:较高的优化级别,推荐使用。-O3
:最高级别优化,可能会增加编译时间和内存使用。-Os
:优化代码大小。
脚本样例
以下是一个示例脚本,用于编译一个包含多个源文件的项目,并链接一个非系统库:
#!/bin/bash
# 编译选项
CFLAGS="-g -O2"
LDFLAGS="-L/path/to/lib -lname"
INCLUDES="-I/path/to/include"
# 源文件列表
SOURCES="main.c file1.c file2.c"
# 目标文件列表
OBJECTS="main.o file1.o file2.o"
# 编译每个源文件
for src in $SOURCES; do
obj="${src%.c}.o"
gcc -c $CFLAGS $INCLUDES $src -o $obj
done
# 链接目标文件
gcc -o my_program $OBJECTS $LDFLAGS
参数总结
-o
:指定输出文件。-c
:编译但不链接。-lm
:链接数学库。-L
:指定库路径。-l
:链接库。-I
:指定头文件路径。-g
:生成调试信息。-O
:优化级别。
通过这些选项,您可以灵活地控制编译过程,以满足不同的开发需求。