blog.monophile.net

コンピュータのこととかのメモ。

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS] においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。

work

各種システム構築と管理を承ります。

Cloud PlatformOpenstack, GCP, AWS, Azure, ...
Openstackkeystone, glance, cinder, swift, neutron, nova, ...
VirtualizationQEMU+KVM, LXD/LXC, Docker, ...
OSDebian GNU/Linux, Ubuntu, CentOS, ...
NetworksIPSec, L2TP, VXLAN, WirelessAP, ...
WebAppsWordPress, GitLab, Redmine, ...
Configuration ManagementAnsible, Terraform, ...
MonitoringNagios, Munin, ...

posts

C言語.cを実行可能形式.outにコンパイルするmakefile

いきさつ

テスト用に書くC言語のファイルをコンパイルするためのmakefileを書く。 src/とbin/という2つのディレクトリにソースと生成物を分けることが目的。 つまり、srcにhoge.cとpiyo.cがあるとして、binにhoge.outとpiyo.outを作りたい。

以下ではサフィックスルールを用いたmakefileと置換文字%を用いたmakefileを書いてみた。

ディレクトリ構造

ディレクトリ構造は以下のようなものを想定している。

コンパイル前

$ tree .
.
├── makefile
└── src
    ├── hoge.c
    └── piyo.c

コンパイル

$ make
mkdir -p bin
gcc -o bin/hoge.out src/hoge.c
gcc -o bin/piyo.out src/piyo.c

コンパイル後

↑でコンパイルすると↓のようにbin/以下に生成物 bin/????.outが 出来上がる。

$ tree .
.
├── bin
│   ├── hoge.out
│   └── piyo.out
├── makefile
└── src
    ├── hoge.c
    └── piyo.c

置換文字%を使うmakefile

.PHONY  := all clean
SRCDIR  := src
TRGDIR  := bin
SRC     := hoge.c piyo.c
OBJ     := $(SRC:%.c=$(TRGDIR)/%.out)

all: $(TRGDIR) $(OBJ)

clean:
    rm -rf $(TRGDIR)/

$(TRGDIR):
    mkdir -p $(TRGDIR)

$(TRGDIR)/%.out: $(SRCDIR)/%.c
    gcc -o $@ $^

VPATHとサフィックスルールを使うmakefile

.PHONY    := all clean
SRCDIR    := src
TRGDIR    := bin
SRC       := hoge.c piyo.c
OBJ       := $(SRC:%.c=%.out)
VPATH     := $(TRGDIR):$(SRCDIR):./
.SUFFIXES :=
.SUFFIXES := .out .c

all: $(TRGDIR) $(OBJ)

clean:
    rm -rf $(TRGDIR)

$(TRGDIR):
    mkdir -p $(TRGDIR)

.c.out:
    gcc -o $(TRGDIR)/$@ $<