blog.monophile.net

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。 また、計算を主題に制作を行い、現代音楽作品や公共インスタレーション作品など技術提供を行う。 三輪眞弘に師事する。

List

"*.cを*.outにコンパイルするmakefile"

いきさつ

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

置換文字%を使う方法

CC      = gcc -o $@ $^
DIR     = bin
SRC     = hoge.c foo.c
SRCDIR  = src
OBJ     = $(SRC:%.c=$(DIR)/%.out)
.phony  = all clean

all:$(DIR) $(OBJ)

clean:
    rm -rf bin/

$(DIR):
        mkdir -p $(DIR)

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

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

DIR = bin
SRC = hoge.c foo.c
OBJ = $(SRC:%.c=%.out)
LIB = bar
VPATH = bin:src:./
.phony: all clean
.SUFFIXES :
.SUFFIXES : .out .c

.c.out:
 gcc -o $(DIR)/$@ $< -l $(LIB)

all: $(DIR) $(OBJ)

clean:
 rm -rf bin/

$(DIR):
 mkdir -p $(DIR)