makefile を作ってみる
makefile を作ってみたのでちょっと内容をメモしておきます。詳しいことは全然わかってないですが、そして、超絶単純な C アプリですが、とりあえずメモだけ・・・
1.ソースの用意
makefile 作ることが目的なのでソースは簡単なもので。
■ test.c
#include <stdio.h> void test() { printf("test !!\n"); }
■ main.c
#include <stdio.h> void main() { test(); }
2.makefile の作成
test.c から共有ライブラリ libtest.so を作って、main.c が libtest.so に依存するのでターゲット main の箇所には main.c に加えて libtest.so も書く感じで。
■ makefile
main: main.c libtest.so gcc -L./ -o main main.c -ltest libtest.so: test.c gcc -shared -o libtest.so test.c
3.make コマンドの実行
ちゃんと libtest.so と main が作成されている。
# make gcc -shared -o libtest.so test.c gcc -L./ -o main main.c -ltest # ls libtest.so main main.c makefile test.c # ./main test !!
※ 環境変数 LD_LIBRARY_PATH に libtest.so のディレクトリを設定しておく。
ちなみに make は関連するファイルに更新があった場合のみコンパイル等が行なわれるらしく、特に main.c、test.c を更新せずに再度 make 実行すると以下のようになる。
# make make: `main' は更新済みです
main.c だけ更新するとターゲット main のコマンドだけが実行される。
# make gcc -L./ -o main main.c -ltest
あと、特に引数ナシで make 実行した場合、おそらく一番上のターゲットだけが実行されるっぽい。例えば、以下のようにターゲットを入れ替えると libtest.so しか実行されない。
■ makefile
libtest.so: test.c gcc -shared -o libtest.so test.c main: main.c libtest.so gcc -L./ -o main main.c -ltest
# make gcc -shared -o libtest.so test.c
上記の makefile でターゲット main を実行したい場合は make main といったように引数にターゲット名を与えてやればいい。
# make main gcc -shared -o libtest.so test.c gcc -L./ -o main main.c -ltest # ls libtest.so main main.c makefile test.c
make のドキュメントは以下です。ここをちゃんと読まないといけませんね・・・
・GNU make
https://www.gnu.org/software/make/manual/make.html
ひとまず今日のところは以上です。