Ubuntu環境におけるC言語のコンパイル手法とMakefileの活用

UbuntuでC言語の「Hello, World!」を実行

1. プログラムの作成
ターミナルを開き、nano、vim、またはgeditを使用してhello.cという名前のファイルを作成して編集します。ここではnanoを使用します。

nano hello.cを実行し、以下のコードを入力します。

#include <stdio.h>

int main(void) {
    puts("Hello, World!");
    return 0;
}

Ctrl+Xを押し、次にYとEnterを押してnanoを保存して終了します。

2. プログラムのコンパイル
gccコンパイラを使用してソースコードを実行ファイルにコンパイルします。コマンドはgcc hello.c -o helloです。

3. プログラムの実行
./helloを入力すると、次のように表示されます。

Hello, World!

複数ファイルのコンパイル

(1)ファイルの作成

1. サブルーチンファイルsub1.cを作成します。nano sub1.cと入力し、その中に以下のコードを書きます。

int compute_product(int a, int b) {
    return a * b;
}

2. 同様の操作でメインプログラムmain.cファイルを作成します。

#include <stdio.h>

// プロトタイプ宣言
int compute_product(int a, int b);

int main(void) {
    int result = compute_product(5, 7);
    printf("5 * 7 = %d\n", result);
    return 0;
}

(2)gccによるコンパイル

1. 2つのソースファイルを同時にコンパイルし、1つの実行ファイルにリンクします。

gcc main.c sub1.c -o myapp

2. 実行すると、次のように表示されます。

./myapp
5 * 7 = 35

(3)Windowsプラットフォームでのコンパイル

ツール:Dev-C++
上記と同じコードを使用すると、プログラムエラーが発生します。これは、メイン関数main.cをコンパイルする際に、compute_productが定義されていないという問題が発生するためです。したがって、2つのファイルを1つにまとめる必要があります。そうすることで正しい結果が出力されます。Dev-C++では、プロジェクトを作成して両方のソースファイルを追加するか、1つのファイルに統合することで解決できます。

(4)Makefileによるコンパイル

1. コマンドnano Makefileを使用してMakefileファイルを作成し、以下を入力します。

# コンパイラとオプション
CC = gcc
CFLAGS = -Wall -O2

# オブジェクトファイルと実行ファイル名
OBJ_FILES = main.o sub1.o
EXECUTABLE = calculator

# デフォルトターゲット
all: $(EXECUTABLE)

# 実行ファイルのリンク
$(EXECUTABLE): $(OBJ_FILES)
	$(CC) $(CFLAGS) -o $@ $^

# 各オブジェクトファイルのコンパイル(パターンルールを使用)
%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

# クリーンアップ
clean:
	rm -f $(OBJ_FILES) $(EXECUTABLE)

注意:
コード内の$(CC) $(CFLAGS) -o $@ $^、$(CC) $(CFLAGS) -c $< -o $@、rm -f $(OBJ_FILES) $(EXECUTABLE)の行の前には、スペースキーではなくTabキーによるインデントが必要です。nanoエディタでは、Tabキーとスペースが同じように見えることがあるため、注意して区別する必要があります。

2. Makefileを使用したコンパイル
ターミナルでmakeコマンドを実行すると、コンパイルプロセスが表示され、最終的に実行ファイルcalculatorが生成されます。プログラムを実行するには./calculatorを実行します。

タグ: Ubuntu C言語 GCC Makefile Dev-C++

11月2日 15:11 投稿