web-dev-qa-db-ja.com

Makefileを記述して単純なCプログラムをコンパイルする方法

次のプログラムをコンパイルします

#include <stdio.h>
int main(void)
{
   printf ("Hello from your first program!\n");
   return 0;
}

a)-Makefileタイプのファイルを使用する

b)-実行可能ファイルの名前はHelloになります

"演習を手伝ってください。CodeBlocksでの実行方法は知っていますが、Makefileとは何か、Linuxでの記述方法はわかりません。コマンド" gcc filename.c "を使用してコンパイルし、その後" ./ a.out "ですが、Makefileがまだわかりません。これは一種のシェルスクリプト、命令ですか?このタスクのMakefileは正確にどのように見えるでしょうか。事前に感謝します:)"

9
Zhivago

これはhelloプログラム用の単純なmakeファイルです。

CC      = gcc
CFLAGS  = -g
RM      = rm -f


default: all

all: Hello

Hello: Hello.c
    $(CC) $(CFLAGS) -o Hello Hello.c

clean veryclean:
    $(RM) Hello

makefile.m1およびmakefile.m2という名前の1つのディレクトリに2つのmakefilesがあり、両方のmake fileをビルドする場合は、次のコマンドを使用してください

make -f makefile.m1
make -f makefile.m2

または、以下を含む単一のMakefileを使用します。

m1:
  make -f makefile.m1

m2:
  make -f makefile.m2

make m1またはmake m2を使用します

メイクファイルの名前がMakefile

Makefileには任意の名前を付けることができます。 myfirstmakefile.mkという名前を付けたいとしましょう。後でそれを使用するには、makeに必要なmakefileを指示する必要があります。これには-fオプションを使用します。

make -f myfirstmakefile.mk

また、現存する.mkも必須ではありません。好きなものを使用できますが、-fオプションの使用を忘れることはありません。

これはあなたにとって意味のあるものになるでしょう。

12
Jayesh Bhoi

makefilemakeユーティリティのレシピで、いくつかのファイル(targetと呼ばれる)をいくつかのファイルから作成する方法シェルによって実行される一連のコマンドを使用する他のファイル(依存関係と呼ばれる)。 makefileは通常、次のようになります。

target: dependency [...]
        command1
        command2

実行してみてくださいman make 詳細については。

makeには単純なプログラムのコンパイル方法を知っている組み込みのルールがあるので、あなたのタスクでは、実際にはMakefileは必要ありません。必要なのは、Cソースを実行可能ファイル名(Hello)にちなんだ名前のファイルに.c拡張子、つまりHello.c

次に、単純な

$ make Hello
cc     Hello.c   -o Hello

すべてを行います。 ccの代わりにgccを使用したい場合は、

$ rm Hello
$ make CC=gcc Hello
gcc     Hello.c   -o Hello

組み込みのルールが正しいことを知っているので、空のmakefileで十分だとインストラクター/教師/教授に伝えた場合、追加のクレジットが得られ、おそらくインストラクターは新しいことを学んだでしょう:-)参照を求められたら、makeマニュアルの関連部分を引用するか、プロのように makeユーティリティのPOSIX標準 、セクションデフォルトのルール

9
Jens

makefileに進む前に、それが何で、なぜそれが必要なのかを知っておく必要があります。

Makefileとは何ですか?

Makefileは、コンパイルとリンクによってソースファイルからターゲット出力(通常は1つ以上の実行可能ファイル)を構築するのに役立つ、特定の所定の構文で記述されたスクリプトです。簡単に言うと、makefileはソースコードをシンプルかつ高速にコンパイルします。 Makefileが必要な理由

=>大規模なプロジェクトには、相互に依存する、または階層的に配置された複数のソースファイルを含めることができます。たとえば、ファイルAをコンパイルするには、まずBをコンパイルする必要があります。 Bをコンパイルするには、まずCをコンパイルする必要があります。等々。

=> Makeはこれらの問題の解決策です。これを使用して、プロジェクト全体を適切な方法でコンパイルし、makeである単一のコマンドを入力して、makeルール(後で説明します)に従ってターゲットを生成できます。

=>重要な機能は、いくつかの変更後にプロジェクトを再コンパイルすると、変更されたファイルとそれに依存するその他のファイルのみが再コンパイルされることです。これは多くの時間を節約します。

=>大規模なプロジェクトの場合、ソースにいくつかの変更を加えると、手間がかかり、エラーが発生しやすく、時間がかかるたびにプロジェクト全体を手動で再コンパイルします。

ここにニースのリンクがあります: 最初のメイクファイルの書き方

4
vishesh

Makefileは、特定のタスクを実行する方法と、それらのタスク間の依存関係が記載されたコンピューターのレシピです。

単純な形式では、次のようになります。

a.out: filename.c
        gcc filename.c

a.outからfilename.cをビルドするには、コマンドgcc filename.cを実行します。a.outfilename.cよりも新しい場合は、何もしないでください」

注:gcc行の最初の文字mustはタブである必要があります。

2
Aaron Digulla