マスターmakefile:5
1173 ワード
簡単によく使われるmakefileコマンドを紹介します.
-nオプションは、命令の実行順序を承諾しますが、この命令を実際に実行することはありません.これは、命令の順序が正しいことを確認するのに役立ちます.
-Cオプションは、別のディレクトリの下でそのディレクトリの下のmakefileを実行するように切り替えることができます.たとえば、前のレイヤに戻って現在のレイヤのmakefileを実行するために使用できます.
大きなプロジェクトでは、異なるモジュールまたはサブシステムのソースコードを異なるサブディレクトリに配置し、各サブディレクトリの下にそのディレクトリのMakefileを書き、合計Makefileでmake-Cコマンドで各サブディレクトリのMakefileを実行します.例えばLinuxカーネルソースルートディレクトリの下にはMakefileがあり、サブディレクトリfs、netなどにもそれぞれのMakefileがあり、二次サブディレクトリfs/ramfs、net/ipv 4などにもそれぞれのMakefileがある.
makeコマンドラインでも=または:=変数を定義できます.今回のコンパイルではデバッグオプション-gを追加したいのですが、コンパイルのたびに-gオプションを追加したくないので、コマンドラインでCFLAGS変数を定義して、Makefileのコンパイルが終わってから変更する必要はありません.
なお、コマンドラインの値は、MakefileでもCFLIGS変数が定義されている場合、Makefileの値を上書きします.つまり、外部ではmakefileの内部の値が上書きされます.
-nオプションは、命令の実行順序を承諾しますが、この命令を実際に実行することはありません.これは、命令の順序が正しいことを確認するのに役立ちます.
-Cオプションは、別のディレクトリの下でそのディレクトリの下のmakefileを実行するように切り替えることができます.たとえば、前のレイヤに戻って現在のレイヤのmakefileを実行するために使用できます.
cd ..
make -C learnMakeFile
make: Enter Entering directory `/home/wc/learnMakeFile'
cc
-c -o main.o main.c
cc
-c -o stack.o stack.c
cc
-c -o maze.o maze.c
gcc main.o stack.o maze.o -o main
make: Leaving directory `/home/wc/learnMakeFile'
大きなプロジェクトでは、異なるモジュールまたはサブシステムのソースコードを異なるサブディレクトリに配置し、各サブディレクトリの下にそのディレクトリのMakefileを書き、合計Makefileでmake-Cコマンドで各サブディレクトリのMakefileを実行します.例えばLinuxカーネルソースルートディレクトリの下にはMakefileがあり、サブディレクトリfs、netなどにもそれぞれのMakefileがあり、二次サブディレクトリfs/ramfs、net/ipv 4などにもそれぞれのMakefileがある.
makeコマンドラインでも=または:=変数を定義できます.今回のコンパイルではデバッグオプション-gを追加したいのですが、コンパイルのたびに-gオプションを追加したくないので、コマンドラインでCFLAGS変数を定義して、Makefileのコンパイルが終わってから変更する必要はありません.
$ make CFLAGS=-g
cc -g
-c -o main.o main.c
cc -g
-c -o stack.o stack.c
cc -g
-c -o maze.o maze.c
gcc main.o stack.o maze.o -o main
なお、コマンドラインの値は、MakefileでもCFLIGS変数が定義されている場合、Makefileの値を上書きします.つまり、外部ではmakefileの内部の値が上書きされます.