Daftar Isi
Makefile berfungsi untuk memerintahkan compile dan link sebuah program.
Windows
- Download and Install Make
- add Make to path
Ubuntu
$ sudo apt-get install make
Syntax dasar
target: prerequisities <TAB> recipe
target adalah nama fungsi dan prerequisities adalah yang mengikuti target. Command-nya disebut recipe. Recipe menggunakan prerequisites untuk membuat target. target, prerequisites, dan recipe membentuk sebuah rule.
Single Command [1]
Sebagai contoh, buatlah sebuah file tanpa extension dengan nama Makefile.
say_hello: echo "Hello World"
Jalankan di terminal dengan perintah make, hasilnya:
$ make echo "Hello Wolrd" Hello World
Hasil di atas menampilkan command dan hasilnya. Command dapat disembunyikan dengan menambahkan @ di depan echo.
say_hello: @echo "Hello World"
Hasilnya adalah:
$ make Hello World
Lebih dari Satu Commands [2]
Apabila terdapat lebih dari 1 target, dengan menggunakan syntax di bawah ini maka hanya target yang ditulis pertama kali yang akan dijalankan.
cmd01: @echo "command ke-1" cmd02: @echo "command ke-2"
Agar semua command dijalankan maka perlu ditambah all sebagai berikut:
all: cmd01 cmd02 cmd01: @echo "command ke-1" cmd02: @echo "command ke-2"
Tambahkan juga spesial phony target untuk mendefinisikan bahwa semua target adalah bukan files. Ini agar tidak membuat bingung make dalam menjalankan target-nya. Berikut ini adalah contoh penulisan phony:
.PHONY: all cmd01 cmd02 all: cmd01 cmd02 cmd01: @echo "command ke-1" cmd02: @echo "command ke-2"
Referensi
Variable
Variable berguna agar sebuah command dapat dengan mudah diganti dengan command yang lainnya. Misalnya:
CC := gcc
Automatic variables
Berguna untuk mengganti nama dari target atau prerequisite.
- $@: diganti dengan nama target
- $<: diganti dengan nama pertama dari prerequisite
- @^: diganti dengan nama semua prerequisite
Pattern rules
%html: %.rst <recipe>
Rule di atas untuk meng-compile sebuah file dengan akhiran html dari file rst.
Contoh Penggunaan
Berikut ini contoh penggunaan pattern rule untuk mengkonversi file rst ke html dengan menggunakan rst2html.py.
%.html: %.rst rst2html.py $< $@
Misalnya di dalam direktori tersebut terdapat file rst yang bernama latihan.rst. Kemudian jalankanlah:
make latihan.html
Hasilnya pada direktori tersebut akan di-generate sebuah file dengan nama latihan.html.
Definisi
Wildcard berfungsi untuk mendaftar semua file dengan ekstensi yang didefinisikan.
Contoh
SRC:= $(wildcard *.rst) OUT:= $(SRC:%.rst=%.html) all: $(OUT) %.html: %.rst rst2html.py $< $@
Penjelasan syntax
SRC:= $(wildcard *.rst)
> mendaftar nama semua file yang bearkhiran .rstOUT:= $(SRC:%.rst=%.html)
> mengganti file yang berakhiran rst dengan htmlall: $(OUT)
> untuk memanggil rule%.html: %.rst
> ketika daftar nama di $(OUT) match, maka recipe akan dijalankan
Agar command Makefile dapat dijalankan secara otomatis apabila ada perubahan isi file, maka perlu ditambahkan sebuah fungsi untuk melihat status perubahan file tersebut.
Command di ubuntu yang bernama inotifywait dapat digunakan untuk mengawasi perubahan file dalam sebuah folder dan kemudian menjalankan perintah tertentu apabila ada perubahan (setelah tekan save file).
Install
$ sudo apt-get install inotify-tools
Makefile
.PHONY: watch watch: while true; do \ inotifywait -qre close_write path\to\folder; \ make targetname; \ done
Dengan menjalankan script di bawah ini, setiap kali ada perubahan isi file maka command akan dijalankan.
$ make watch
[1] | example01 |
[2] | example02 |