program.c
、program.h
、headers.h
の3つのファイルがあります。
program.c
には、program.h
およびheaders.h
が含まれます。
Linuxでgccコンパイラを使用してこれをコンパイルする必要があります。これを行う方法がわかりません。 Netbeansは私のために作成しましたが、空です。
興味深いことに、ソースファイルに関する規則が与えられている場合、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を使用しないでください。お願いだから! :)
たとえば、次の単純なMakefileで十分です。
CC = gcc CFLAGS = -Wall all:プログラム program:program.o program.o:プログラム.c program.h headers.h clean: rm -f program program.o run:program ./program
クリーンアップして実行した後の次の行には、スペースではなく<tab>
が必要であることに注意してください。
UPDATE以下のコメントが適用されました
all: program
program.o: program.h headers.h
十分です。残りは暗黙的です
最も単純なmakeファイルは
all : test
test : test.o
gcc -o test test.o
test.o : test.c
gcc -c test.c
clean :
rm test *.o
ヘッダーの数と開発習慣に応じて、gccmakedepを調査することができます。このプログラムは、現在のディレクトリを調べ、各.c/cppファイルのヘッダー依存関係をメイクファイルの最後に追加します。 2つのヘッダーと1つのプログラムファイルがある場合、これは過剰です。ただし、5個以上の小さなテストプログラムがあり、10個のヘッダーのいずれかを編集している場合、makeを信頼して、変更によって変更されたプログラムを正確に再構築できます。