Help us understand the problem. What is going on with this article?

GNU Make入門 1/2

はじめに

新卒 SE 見習い(投稿当時)のぷるぷえです。
全く違う仕事にアサインされたので、忘れないうちに文字に起こそうといったところです。

敷居を低くしようとした結果、抽象的な表現も散見します。予めご了承ください。
このエントリが私と同じ初心者 C 系プログラマーさんのエントリーになれば嬉しい限りです。

環境

Ubuntu Server 18.04.2 LTS
GNU Make 4.1

全体の流れ

以下の章立てで進めていきます。
尚、2つのエントリに分ける予定です。(いつか投稿します)
本エントリでは3章まで扱います。

  1. make とは
  2. 超絶簡単に makefile
  3. 結構簡単に makefile ここまで
  4. C ファイルのコンパイル
  5. 4 で作成した makefile の改良

make とは

作業を自動化するツールのことです。
コマンド(echo とかgccとか)を自動化するプログラムを組んだ makefile を作成すると、いろんな操作がコマンド一つでポーンってできちゃいます。

うれしいこと

  • 単純作業の自動化
  • 膨大なソースファイルを一気に実行
  • 変更したファイルだけ差分コンパイル
  • テストで必要

などなど。

超絶簡単に makefile

コマンドライン上に文字列を表示する「echo」コマンドを自動化します。
超絶簡単です。

1. makefile を作成

お使いのエディタで「makefile」という名前のファイルを作成してください。1
Atom なら、Ctrl + N → Ctrl + Shift + L で makefile を選択します。

2. プログラムを書く

makefile
all:
  echo Hello world!

3.実行

コンソールで「make」コマンドを打ちます。

makefile
$ make
echo Hello World!
Hello World!

表示されました。

結構簡単に makefile

ディレクトリのお掃除を自動化してみます。
こんなテキストファイルがあるとしましょう。

qiita_make3.PNG

フォルダ内には、rm.mk という makefile と C ファイル、そしてテキストファイルが2つ存在します。

ここを make コマンドで

qiita_make4.PNG

こうしたい!
rm.mk と同一ディレクトリ上のテキストファイルをお掃除するのがゴール。

1. makefile を作成

テキストファイルを rm する makefile を作成するので、「rm.mk」としました。

2. プログラムを書く

rm.mk
clean:; rm -f *.txt

ここで使われている「 * 」は、サフィックスを除いたターゲットの名前を指定する自動変数です。
*.txt は、任意のテキストファイルを対象にするという意味になります。

サフィックス : 文字列やデータ列の末尾に付加され、何らかの意味を表す要素を指す。(IT用語辞典さんより)

3.実行

今回は、makefile というファイル名ではなく、「rm.mk」としたので、以下のように実行します。

rm.mk
$ make -f rm.mk
rm -f *.txt

make コマンドの -f オプションによって、そのあとに指定したファイル(rm.mk)を makefile として扱うことができます。

qiita_make4.PNG

テキストファイルだけがすべて削除されました。
単純作業を自動化することがイメージできたと思います。

さいごに

次回は、面倒な C ファイルのコンパイルを自動化します。
make っていいな、となるのはこれからですね。

参考文献

  • GNU Make 第3版 - Robert Mecklenburg 著、矢吹 道郎 監訳、菊池 彰 訳

  1. 「makefile」や「Makefile」は、デフォルトで呼び出されます。拡張子が「.mk」の makefile は、make -f ~~.mk で呼び出します。 

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away