6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Makefileを作ってビルドしよう(超初級編)

Last updated at Posted at 2019-07-09

##Cの入門書を進めてる途中(進捗だめです)
もう何回目の入門だよって感じですけどこれやってます

C言語本格入門 ~基礎知識からコンピュータの本質まで

##make……?makefile?
巷によくある入門書みたいにただ単にコンパイルするだけじゃなくてmakefileを作成してコンパイルを通すやり方で進んでいくので、実践に近い形になってます。(なってるそうです)

##無知だった自分
実際にmakeでコンパイルを業務でしたことがあるにもかかわらず、読み進めて「これ実行ファイルの名前を変えてるだけなのにわざわざMakefile作る必要なくね?」と思ってしまったのですが、それをツイッターで呟いたらソースファイルが数百数千個あるでっかいプロジェクトでは便利というありがたいツッコミがございました

全く恥ずかしいことにこれまで現場で散々(といっても半年くらいですが)makeのお世話になってたはずなのに、どう書くかもどんなメリットがあるかも知らずにいました

###Makefileをどうやって書くのか

Makefile.hoge
PROGRAM = hoge
OBJS    = hoge.o
SRCS    = $(OBJS:%.o=%.c)
CC      = gcc
CFLAGS  = -g -Wall
LDFLAGS =

$(PROGRAM):$(OBJS)
     $(CC) $(CFLAGS) $(LDFLAGS) -o $(PROGRAM) $(OBJS) $(LDLIBS)

※PROGRAM行のCCの後ろはタブです。
どんな意味があるかを上から解説します。
PROGRAM:プログラム名で、実行ファイルの名前になります
OBJS:リンクするオブジェクトファイル名をスペース区切りで列挙。hoge.o fuga.oみたいに続けて書くことで複数ファイルを指定できる……って認識であってますかね?
SRCS:ソースコードのファイル名指定。ここではOBJSの拡張子を.cにすることでコンパイル対象をhoge.cにしています。
CC:Cコンパイラのコマンド名。ここではgcc
CFLAGS:コンパイルのオプション指定。ここではデバッガ用の-gと警告を厳しくする-Wallを指定してます。
LDFLAGS:リンカのオプション指定(よくわかってないので割愛。特殊なライブラリのリンク等をする際に使用するそうです)
$(PROGRAM):プログラムの生成方法の記述

Makefileの書き方は他にもあるようなので、まだまだ勉強が必要ですね……

###Makefileを使ってビルド

$ make -f Makefile.hoge

ビルドの過程はこんな感じです

gcc -g -Wall -c -o hoge.o hoge.c
gcc -g -Wall -o hoge hoge.o

これで実行ファイルhogeが出来るので以下で実行できます。

$ ./hoge

#まとめ
・Makefileは大規模開発で便利
・書き方多種多様

……でも、makeいろんな書き方あるってことだけどググっても書籍がオライリー本しか出てこないのはどういうことなの。調べ方が悪い?

6
6
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?