makefile なしで make コマンドを使用しますか?
make
には、オーバーライドしない限りデフォルトとして機能する暗黙のルールがあります。
メイクのマニュアルページによると:
make -p -f/dev/null
実際にファイルを再作成しようとせずに、すべての暗黙のルール (および関連する環境変数) を一覧表示します。
使用法を示すためにmake
、Cygwin で実行したところ、exe
ファイルが作成されました。.c
make に渡される名前に注意してください。
$ ls
hello.c
$ make hello
cc hello.c -o hello
$ ls
hello.c hello.exe
これを Ubuntu Linux でも実行したところ、結果は上記とほぼ同じでしたが、.exe
拡張機能は存在せず、代わりにプレーンなhello
実行可能ファイルがありました。
$ ls
hello.c hello
段階的な導出
make Implicit ルールの関連部分は次のとおりだと思います。
CC = cc
cc
にエイリアスされていますCC
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
LINK
フラグが空になり、TARGET_ARCH
変数も空になるフォーマットが作成されます (ユーザーがさまざまなターゲットアーキテクチャの値を設定できるようにするため)。次に、次のようになります。
%: %.c
# recipe to execute (built-in):
$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
^
変数は前提条件ですhello.c
。他の変数は空です。これらの後に、-o
フラグとターゲット名が続きます。空の変数は、コマンド make run の余分なスペースを説明しています。
cc hello.c -o hello
そして、%: %.c
make に指定されたターゲットと、末尾が.c
.