初探makefile
2577 ワード
恥ずかしいことに、プログラム猿を自慢して、最近makefileに触れて、記録して、第一歩を売った.
前にcコードを书いて、ずっと各种のIDEを使って、VSからXCODEまで、ずっと马鹿なボタンでコンパイルして、最近まで、やっといくつかのコードをSOファイルにコンパイルするため、やっと初めてmakefileに接触して、1枚の新しい扉を开きました.
参考になるブログ:
https://www.cnblogs.com/wang_yb/p/3990952.html
https://blog.csdn.net/dongdong0071/article/details/52040559
一、makefileの概要
target-ターゲットファイル、Object Fileでも実行可能ファイル でもよい. prerequisites-targetを生成するために必要なファイルまたはターゲット command-make実行する必要があるコマンド(任意のshellコマンド)、Makefileのコマンドは[tab]で始まる でなければなりません.
マスタMakefile(マスタMakefileで他のMakefileを参照可能) を読み込む. includeの他のMakefile を読み込む初期化ファイルの変数 暗黙のルールを導き、すべてのルール を分析する.すべてのターゲットファイルの依存関係チェーン を作成依存関係に基づいて、どのターゲットが を再生成するかを決定する.生成コマンド を実行する.
makefileは大規模なエンジニアリングのコンパイルに使用できますが、本人のレベルが限られているため、複雑すぎてはっきり言えないのではないかと心配しています.本稿では、入門レベルの例だけを紹介します.
これらのコードをコンパイルするには、対応するmakefileは次のとおりです.
makeを入力するとgccコンパイルが呼び出され、make cleanを入力するとhellowworld mianが削除されます.o print.o.
makefileコードから論理がはっきりしていることがわかります. helloworldを生成するプログラムにはmainが必要です.oとprint.o 2ファイル main.oの生成にはmainが必要である.cとprint.h print.oの生成にはprintが必要である.cとprint.h
以上がmakefileファイルの作成の論理的考え方であり、実際の作成では、コードを簡略化するために使用できる文法がたくさんあります.例えば、上記のコードは以下のように簡略化できます.
もっと多くの文法は、この文では詳しく説明しません.
不当な点は,皆さんのご叱正を請う.
前にcコードを书いて、ずっと各种のIDEを使って、VSからXCODEまで、ずっと马鹿なボタンでコンパイルして、最近まで、やっといくつかのコードをSOファイルにコンパイルするため、やっと初めてmakefileに接触して、1枚の新しい扉を开きました.
参考になるブログ:
https://www.cnblogs.com/wang_yb/p/3990952.html
https://blog.csdn.net/dongdong0071/article/details/52040559
一、makefileの概要
はっきり言ってmakefileは一連のshellコマンドを1つのファイルに書き、makeコマンドによって実行し、示す.c .hファイル間の相互依存関係は,gcc(g++)を用いてプロジェクトをコンパイルする.その役割は、プロジェクト内の多くのファイルを管理し、相互の依存関係を処理し、コンパイルを容易にすることです.
1.1 makefile基本フォーマット
target ... : prerequisites ...
command
...
...
次のようになります.
target ... : prerequisites ...
command
...
...
1.2 GNU makeの働き方
二、簡単な例
makefileは大規模なエンジニアリングのコンパイルに使用できますが、本人のレベルが限られているため、複雑すぎてはっきり言えないのではないかと心配しています.本稿では、入門レベルの例だけを紹介します.
// Hello world, :
1. print.h
#include
void printhello();
2. print.c
#include"print.h"
void printhello()
{
printf("Hello, world
");
}
3. main.c
#include "print.h"
int main(void)
{
printhello();
return 0;
}
これらのコードをコンパイルするには、対応するmakefileは次のとおりです.
helloworld : main.o print.o #helloword
# main.o print.o
gcc -o helloworld main.o print.o#shell , tab
mian.o : mian.c print.h
gcc -c main.c
print.o : print.c print.h
gcc -c print.c
clean :
rm helloworld main.o print.o
makeを入力するとgccコンパイルが呼び出され、make cleanを入力するとhellowworld mianが削除されます.o print.o.
makefileコードから論理がはっきりしていることがわかります.
以上がmakefileファイルの作成の論理的考え方であり、実際の作成では、コードを簡略化するために使用できる文法がたくさんあります.例えば、上記のコードは以下のように簡略化できます.
objects = main.o print.o #
helloworld : $(objects) // $()
gcc -o helloworld$(objects)
mian.o : mian.c print.h
gcc -c main.c
print.o : print.c print.h
gcc -c print.c
clean :
rm helloworld $(objects)
もっと多くの文法は、この文では詳しく説明しません.
不当な点は,皆さんのご叱正を請う.