編寫一個GCC編譯腳本可以幫助你自動化編譯過程,特別是在處理多個源文件或需要設置特定編譯選項時。以下是一個簡單的示例,展示了如何編寫一個GCC編譯腳本。
假設我們有一個項目,包含以下文件:
main.cutils.cutils.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 是偽目標,即使存在同名文件也會執行。通過這種方式,你可以輕松地管理和編譯多個源文件,并且可以通過修改腳本來自定義編譯過程。