Skip to content

yohanfs/Makefile

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Makefile

Makefile berfungsi untuk memerintahkan compile dan link sebuah program.

Windows

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 .rst
  • OUT:= $(SRC:%.rst=%.html) > mengganti file yang berakhiran rst dengan html
  • all: $(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

About

Catatan tentang Makefile

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published