编写一个GCC编译脚本可以帮助你自动化编译过程,特别是当你有多个源文件或者需要设置特定的编译选项时。以下是一个简单的示例,展示了如何编写一个GCC编译脚本。
假设你有一个项目,包含以下文件:
main.c
utils.c
utils.h
你可以创建一个名为 build.sh
的脚本来编译这个项目。
#!/bin/bash
# 设置编译器
CC=gcc
# 设置编译选项
CFLAGS=-Wall -g
# 设置目标文件和可执行文件
TARGET=myapp
SRCS=main.c utils.c
OBJS=$(SRCS:.c=.o)
# 编译规则
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
# 编译每个源文件生成对应的目标文件
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
# 清理规则
clean:
rm -f $(OBJS) $(TARGET)
# 默认规则
all: $(TARGET)
设置编译器和编译选项:
CC=gcc
CFLAGS=-Wall -g
这里设置了编译器为 gcc
,并添加了一些常用的编译选项 -Wall
(显示所有警告)和 -g
(包含调试信息)。
设置目标文件和可执行文件:
TARGET=myapp
SRCS=main.c utils.c
OBJS=$(SRCS:.c=.o)
这里定义了目标可执行文件 myapp
,源文件列表 main.c
和 utils.c
,以及通过替换 .c
为 .o
得到的目标文件列表 main.o
和 utils.o
。
编译规则:
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
这条规则表示如何从目标文件生成最终的可执行文件。
编译每个源文件生成对应的目标文件:
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
这是一条模式规则,用于将每个 .c
文件编译成对应的 .o
文件。
清理规则:
clean:
rm -f $(OBJS) $(TARGET)
这条规则用于删除生成的目标文件和可执行文件,以便重新编译。
默认规则:
all: $(TARGET)
这条规则表示默认情况下要编译生成目标可执行文件。
build.sh
。chmod +x build.sh
./build.sh
这样,你就可以通过运行 ./build.sh
来编译你的项目了。如果你想清理生成的文件,可以运行 ./build.sh clean
。