编写一个GCC编译脚本可以帮助你自动化编译过程,特别是在处理多个源文件或需要设置特定编译选项时。以下是一个简单的示例,展示了如何编写一个GCC编译脚本。
假设我们有一个项目,包含以下文件:
main.c
utils.c
utils.h
我们将这些文件编译成一个可执行文件 myprogram
。
首先,创建上述文件并添加一些简单的代码。
main.c
#include <stdio.h>
#include "utils.h"
int main() {
printf("Hello, World!\n");
print_message();
return 0;
}
utils.c
#include <stdio.h>
#include "utils.h"
void print_message() {
printf("This is a utility function.\n");
}
utils.h
#ifndef UTILS_H
#define UTILS_H
void print_message();
#endif
创建一个名为 build.sh
的脚本文件,并添加以下内容:
#!/bin/bash
# 设置编译器
CC=gcc
# 设置编译选项
CFLAGS=-Wall -g
# 设置源文件和目标文件
SRCS=main.c utils.c
OBJS=${SRCS%.c}.o
TARGET=myprogram
# 编译规则
all: $(TARGET)
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
# 清理规则
clean:
rm -f $(OBJS) $(TARGET)
.PHONY: all clean
确保脚本文件 build.sh
具有执行权限:
chmod +x build.sh
运行脚本:
./build.sh
这将编译源文件并生成可执行文件 myprogram
。
CC=gcc
:设置编译器为 gcc
。CFLAGS=-Wall -g
:设置编译选项,-Wall
表示显示所有警告,-g
表示包含调试信息。SRCS=main.c utils.c
:列出所有源文件。OBJS=${SRCS%.c}.o
:将源文件列表转换为对象文件列表。TARGET=myprogram
:设置目标可执行文件的名称。all: $(TARGET)
:定义默认目标为生成可执行文件。$(TARGET): $(OBJS)
:定义如何生成目标文件。%.o: %.c
:定义如何从源文件生成对象文件。clean:
:定义清理规则,删除生成的对象文件和可执行文件。.PHONY: all clean
:声明 all
和 clean
是伪目标,即使存在同名文件也会执行。通过这种方式,你可以轻松地管理和编译多个源文件,并且可以通过修改脚本来自定义编译过程。