はじめに
新卒 SE 見習い(投稿当時)のぷるぷえです。
全く違う仕事にアサインされたので、忘れないうちに文字に起こそうといったところです。
敷居を低くしようとした結果、抽象的な表現も散見します。予めご了承ください。
このエントリが私と同じ初心者 C 系プログラマーさんのエントリーになれば嬉しい限りです。
環境
Ubuntu Server 18.04.2 LTS
GNU Make 4.1
全体の流れ
以下の章立てで進めていきます。
尚、2つのエントリに分ける予定です。(いつか投稿します)
本エントリでは3章まで扱います。
- make とは
- 超絶簡単に makefile
- 結構簡単に makefile ここまで
- C ファイルのコンパイル
- 4 で作成した makefile の改良
make とは
作業を自動化するツールのことです。
コマンド(echo とかgccとか)を自動化するプログラムを組んだ makefile を作成すると、いろんな操作がコマンド一つでポーンってできちゃいます。
うれしいこと
- 単純作業の自動化
- 膨大なソースファイルを一気に実行
- 変更したファイルだけ差分コンパイル
- テストで必要
などなど。
超絶簡単に makefile
コマンドライン上に文字列を表示する「echo」コマンドを自動化します。
超絶簡単です。
1. makefile を作成
お使いのエディタで「makefile」という名前のファイルを作成してください。1
Atom なら、Ctrl + N → Ctrl + Shift + L で makefile を選択します。
2. プログラムを書く
all:
echo Hello world!
3.実行
コンソールで「make」コマンドを打ちます。
$ make
echo Hello World!
Hello World!
表示されました。
結構簡単に makefile
ディレクトリのお掃除を自動化してみます。
こんなテキストファイルがあるとしましょう。
フォルダ内には、rm.mk という makefile と C ファイル、そしてテキストファイルが2つ存在します。
ここを make コマンドで
こうしたい!
rm.mk と同一ディレクトリ上のテキストファイルをお掃除するのがゴール。
1. makefile を作成
テキストファイルを rm する makefile を作成するので、「rm.mk」としました。
2. プログラムを書く
clean:; rm -f *.txt
ここで使われている「 * 」は、サフィックスを除いたターゲットの名前を指定する自動変数です。
*.txt は、任意のテキストファイルを対象にするという意味になります。
サフィックス : 文字列やデータ列の末尾に付加され、何らかの意味を表す要素を指す。(IT用語辞典さんより)
3.実行
今回は、makefile というファイル名ではなく、「rm.mk」としたので、以下のように実行します。
$ make -f rm.mk
rm -f *.txt
make コマンドの -f オプションによって、そのあとに指定したファイル(rm.mk)を makefile として扱うことができます。
テキストファイルだけがすべて削除されました。
単純作業を自動化することがイメージできたと思います。
さいごに
次回は、面倒な C ファイルのコンパイルを自動化します。
make っていいな、となるのはこれからですね。
参考文献
- GNU Make 第3版 - Robert Mecklenburg 著、矢吹 道郎 監訳、菊池 彰 訳
-
「makefile」や「Makefile」は、デフォルトで呼び出されます。拡張子が「.mk」の makefile は、make -f ~~.mk で呼び出します。 ↩