Makeに関する世界観です。GNUツールチェインやUNIXシステム管理も参照のこと。
GNU makeは、プログラムのソースコードをコンパイルする時、更新されたファイルだけをコンパイルするなど、色んなことが出来ます。
以下はMakefileの基本。
自分の書いたブログ「神々とともに生きる詩人」2021/02/08より。
Makefileは、基本的に作られるもののあとに:で依存ファイルを書き、それ以下の行でTABに続いて作成方法を書く。
prog: main.o hoge1.o hoge2.o gcc -o prog main.o hoge1.o hoge2.o main.o: main.c gcc -c main.c hoge1.o: hoge1.c gcc -c hoge1.c hoge2.o: hoge2.c gcc -c hoge2.c
これで、main.cが更新された場合、
gcc -c main.c gcc -o prog main.o hoge1.o hoge2.o
のみが実行される。
実際のMakefileでは、変数やマクロを使ってより抽象的な書き方をする。
(「make 改訂版 - オライリー・ジャパン」とMakefile の書き方 (C 言語) - WTOPIA v1.0 documentationを参考にして執筆しました。)
たとえばユーザー変数を使う場合以下のようになります。
CC = gcc OBJS = main.o hoge.o LIBS = -lfuga PROGRAM = prog all: $(PROGRAM) $(PROGRAM): $(OBJS) $(CC) $(OBJS) $(LIBS) -o $(PROGRAM)
(Makefileの解説 - Yasuhiro Mukaigawaを参考に執筆しました。)
Makefileで良く使われるユーザー変数やmakeが保持する変数は以下の書籍が参考になります。
マクロや内部マクロを使ったスマートなバージョンが以下の書籍にあります。
また、以下のサイトにも、一般的に使われるMakefileの一例があります。
gccを使う時は、Makefileの中でCFLAGSやCXXFLAGSを記述することで、最適化に関する環境変数を設定することが出来る。
GentooのPortageは先進的で、/etc/portage/make.confでこの設定をコンパイルする全てのパッケージに対して行うことが出来る。
Gentooも参照のこと。
以下の書籍が参考になります。
Autotoolsを参照のこと。
Javaによるビルドシステム。XMLを用いてビルドを行う。
Javaビルドツールも参照のこと。
GTK+アプリケーションは、pkg-configを用いてコンパイルすることが多い。単にgccだけではコンパイルできないことがあるので注意が必要。
GTK+も参照のこと。
KDEアプリケーションはCMakeをビルドシステムに使う。
CMakeも参照のこと。
Meson+Ninjaを参照のこと。
make