回答:
興味深いことに、ソースファイルに関する規則を前提として、makeがデフォルトでCコンパイラを使用することを知りませんでした。
とにかく、単純なMakefileの概念を示す単純なソリューションは次のようになります。
HEADERS = program.h headers.h
default: program
program.o: program.c $(HEADERS)
gcc -c program.c -o program.o
program: program.o
gcc program.o -o program
clean:
-rm -f program.o
-rm -f program
(makeはスペースのインデントの代わりにタブを必要とするので、コピーするときに必ず修正してください)
ただし、より多くのCファイルをサポートするには、それぞれに新しいルールを作成する必要があります。したがって、改善するには:
HEADERS = program.h headers.h
OBJECTS = program.o
default: program
%.o: %.c $(HEADERS)
gcc -c $< -o $@
program: $(OBJECTS)
gcc $(OBJECTS) -o $@
clean:
-rm -f $(OBJECTS)
-rm -f program
私は通常、メイクファイルで見られる$(CC)や$(CFLAGS)のような変数を省略して、これをできるだけ簡単にしようとしました。あなたがそれを理解することに興味があるなら、私はあなたにその上で良いスタートを与えられたことを願っています。
これが、Cソースに使用するMakefileです。お気軽にご利用ください。
TARGET = prog
LIBS = -lm
CC = gcc
CFLAGS = -g -Wall
.PHONY: default all clean
default: $(TARGET)
all: default
OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
HEADERS = $(wildcard *.h)
%.o: %.c $(HEADERS)
$(CC) $(CFLAGS) -c $< -o $@
.PRECIOUS: $(TARGET) $(OBJECTS)
$(TARGET): $(OBJECTS)
$(CC) $(OBJECTS) -Wall $(LIBS) -o $@
clean:
-rm -f *.o
-rm -f $(TARGET)
makeユーティリティのワイルドカードとpatsubst機能を使用して、現在のディレクトリに.cファイルと.hファイルを自動的に含めます。つまり、新しいコードファイルをディレクトリに追加するときに、Makefileを更新する必要はありません。ただし、生成された実行可能ファイル、ライブラリ、またはコンパイラフラグの名前を変更する場合は、変数を変更するだけで済みます。
どちらの場合も、autoconfを使用しないでください。お願いだよ!:)
.PHONY: clean all default
、コマンドラインから使用することを目的としたターゲットに使用する必要があると思います。また、Autoconf / Automakeはそれほど悪くありません。確かに、彼らはひどく感じ、慣れるのはレンガの壁に頭を押し付けるのと同じくらい楽しいですが、それらは機能し、十分に発達していて、移植性の範囲までほとんどのベースをカバーします、あなたが彼らのひどいデザインに慣れると、最終的にあなたの人生がずっと楽になります。
rm
:stackoverflow.com/questions/2989465/rm-rf-versus-rm-rf
たとえば、次の単純なMakefileで十分です。
CC = gcc CFLAGS =-壁 すべて:プログラム プログラム:program.o program.o:program.c program.h headers.h 掃除: rm -fプログラムprogram.o 実行:プログラム 。/プログラム
<tab>
クリーンアップして実行した後、スペースではなく次の行にある必要があります。
以下の更新コメントが適用されました
make
引数なしの場合、通常はソフトウェアをビルドするだけです。それを実行し、使用のいずれかにmake run
(この答えでは、必ずしもそうではないが、すべてで利用可能なMakefile
S)、またはそれを直接実行します./program
all: program
program.o: program.h headers.h
十分です 残りは暗黙的です
.c
ファイルである場合program:
は、必要なものだけです。Sweet :)
ヘッダーの数と開発習慣に応じて、gccmakedepを調査することをお勧めします。このプログラムは現在のディレクトリを調べ、メイクファイルの最後に各.c / cppファイルのヘッダー依存関係を追加します。2つのヘッダーと1つのプログラムファイルがある場合、これはやりすぎです。ただし、5つ以上の小さなテストプログラムがあり、10個のヘッダーのいずれかを編集している場合は、makeを信頼して、変更によって変更されたプログラムを正確に再構築できます。