こんにちは、現役エンジニアの inno_tech です。
Linux上でC言語の開発環境を構築する方法をお探しでしょうか?
MakeFileのテンプレートも用意したので、こちらの記事を参考にC言語の開発を始めてみてください。
なお、Linux(Ubuntu)の環境構築方法は、こちらの記事で解説しています。仮想環境を使えばWindows上に用意することも可能です。
※本記事は、Ubuntu 20.04LTSの場合を例に説明しています。
コンパイラを入手
まずはターミナルから以下のコマンドを入力し、GNU C/C++コンパイラ(gcc/g++)を入手しましょう。
インストール完了後は、gcc --version
で正しく機能するかを確認します。
# update
sudo apt update
# GNU c/c++コンパイラのインストール
sudo apt install -y build-essential manpages-dev
# インストール確認
gcc --version
当方の実行結果は下の画像のような結果でした。
コマンドがエラーでなければ、バージョンは異なっていても問題なくインストールできています。
エディターを入手
プログラミングをするためのエディターを準備します。
テキストエディターであれば何でもよいのですが、当サイトでは Visual Studio Code(以下、VS Code) を使用します。
Visual Studio Codeのインストール方法はこちらの記事ご覧ください。
すでにエディターがある方は次へ進んでください。
初めてのプログラミング
ファイル構成
まずは作成するプログラムのファイル構成を説明します。
最終的には、下の画像のような構成になります。
include ディレクトリ
ヘッダーファイル(.h) を保存するディレクトリです。
今回は、test_func.h
を用意しました。
src ディレクトリ
ソースファイル(.c) を保存するディレクトリです。
今回は、main.c
と test_func.c
の2つを用意しました。
Makefile
プログラムをビルド(コンパイル)するためのルールを記述するためのファイルです。
gccコマンドを使用することも可能ですが、プロジェクトが大きくなってくるとMakefileを使う必要性が出てきます。
早いうちにMakefile慣れしたほうが良いので、今回はMakefileを使った方法で説明します。
コーディング
まずは test_func.h
test_func.c
を作成します。
このファイル内には“合計値”を返す関数sum() を定義しました。
#include <stdio.h>
/* 合計値を返す */
int sum(int a, int b);
#include "test_func.h"
/**
* @brief 合計値を返す
* @return int [合計値]
*/
int sum(int a, int b)
{
return (a+b);
}
続いて、main.c
を作成します。
main関数からプログラムがスタートし、sum() を呼び出した後、結果を表示するプログラムです。
#include <stdio.h>
#include "test_func.h"
/**
* @brief main関数
* @return int [0: 成功, -1:失敗]
*/
int main(void)
{
int a = 10;
int b = 5;
int result = sum(a, b);
printf("%d + %d = result: %d\n", a, b, result );
return 0;
}
Makefile作成
続いて Makefile を作成します。
srcディレクトリ内の拡張子[.c] のファイルをコンパイルするMakefileを用意しました。
細かい中身の理解は置いておいて、まずはこれをコピペしましょう。
# directory設定
SRC_DIR = src
INCLUDE_DIR = include
OBJ_DIR = obj
DBG_DIR = debug
BIN_DIR = bin
# ソースファイル
## IGNORE_SRCで指定したファイル以外の[xxx.c]をコンパイル
IGNORE_SRC = $(SRC_DIR)/ignore_file.c
SRCS = $(filter-out $(IGNORE),$(wildcard $(SRC_DIR)/*.c))
OBJS = $(subst $(SRC_DIR),$(OBJ_DIR),$(SRCS:.c=.o))
OBJS_DEBUG = $(subst $(SRC_DIR),$(DBG_DIR),$(SRCS:.c=.o))
# 出力ファイル名
TARGET_NAME = main.out
TARGET = $(BIN_DIR)/$(TARGET_NAME)
TARGET_DEBUG = $(DBG_DIR)/$(TARGET_NAME)
# コンパイラ設定
## gcc or g++
CC = gcc
## コンパイルフラグ
CFLAGS = -Wall -I$(INCLUDE_DIR)
DBGCFLAGS = -g -Wall -I$(INCLUDE_DIR)
# default rule
default: makedir all foot_print
# non-phony targets
## release ビルド
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $(OBJS)
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c -o $@ $<
## debug ビルド
$(TARGET_DEBUG): $(OBJS_DEBUG)
$(CC) $(DBGCFLAGS) -o $@ $(OBJS_DEBUG)
$(DBG_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(DBGCFLAGS) -c -o $@ $<
# 設定の表示
foot_print:
@echo "*** Finish make ***"
# phony rules
# releaseビルド
.PHONY: all
all: $(TARGET)
# debugビルド
.PHONY: debug
debug: makedir $(TARGET_DEBUG) foot_print
# ディレクトリ作成
.PHONY: makedir
makedir:
@mkdir -p $(BIN_DIR) $(OBJ_DIR) $(DBG_DIR)
# clean .PHONY: clean
clean:
rm -f $(OBJS) $(OBJ_DEBUG) $(TARGET) $(TARGET_DEBUG)
ビルド & 実行
ファイルの準備ができたら、makeコマンドでビルドします。
# Makefileの置いてあるディレクトリ(プロジェクトのルート)に移動
cd [project_dir]
# ビルド(Releaseモードの場合)
make
# ビルド(debugモードの場合)
make debug
ビルドが成功すると、下の画像のようなファイルが生成されます。
binディレクトリ配下に実行プログラム「main.out」があるので、早速ターミナルから実行してみます。
(debugモードでビルドした場合は、debug/main.out が実行ファイルとなります。)
# 実行
./bin/main.out
# 実行結果
# 10 + 5 = result: 15
- C++の場合は、Makefileのgccの部分をg++に変更することで、C++コンパイラに切り替えが可能です。
以上で、C言語のプログラムをコンパイル・実行ができる開発環境が整いました。
さいごに
今回は、Linux上でC言語の開発環境構築方法 と MakeFileを使ったビルド方法を説明しました。
さらにプログラムをデバッグする方法を知りたい方はこちらの記事に参考にしてください。
また、VSCode上でビルドを自動化するテクニックもこちらにまとめているので参考にして下さい。
ちなみに、C言語の学習には、こちらの参考書がおすすめです。
また、読みやすいコードを書くためにはこちらの書籍も読んでおくとよいでしょう。
いかがだったでしょうか。
ほかにも役立つ情報が他のページにもあるかもしれません。
ご覧になるかはあなた次第です!
この記事がイイねと思ったら、Twitterフォロー か にほんブログ村のどちらかしてくれたら嬉しいよ!
コメント / ご要望