Selanjutnya kita akan mendemokan penggunaan sederhana dari make. Make adalah program yang dapat ditemukan di semua sistem Unix.

Make membaca suatu deskripsi dari suatu proyek dari sebuah file make (secara default disebut Makefile di direktori tertentu). Makefile menspesifikasikan serangkaian aturan kompilasi dalam bentuk target (seperti file eksekutabel) dan dependencies-nya (seperti file-file objek dan file-file sumber) dengan format seperti berikut :

target: dependencies 
command

Untuk masing-masing target, make memeriksa waktu modifikasi dari file-file dependency yang berhubungan untuk menentukan apakah target perlu dibangun ulang menggunakan perintah terkait. Catat bahwa baris command di sebuah makefile mesti dipisahkan dengan TAB bukan dengan spasi.

GNU Make berisi beberapa aturan bawaan, disebut sebagai aturan impilisit, untuk menyederhanakan konstruksi makefile. Sebagai contoh, aturan tersebut menspesifikasikan bahwa file *.o dapat diperoleh dari file *.c melalui proses kompilasi, dan bahwa file eksekutabel dapat dibuat dengan menghubungkan file-file *.o satu sama lain. Aturan implisit didefinisikan dalam bentuk variabel ofmake, seperti CC (compiler C) dan CFLAGS (opsi-opsi kompilasi untuk program C), yang dapat diset menggunakan baris VARIABLE=VALUE di makefile. Untuk C++ variabel yang sama adalah CXX dan CXXFLAGS,  sementara variabel make CPPFLAGS mengatur opsi preprosessor. Aturan implisit dan user-defined secara otomatis dikaitkan satu sama lain sesuai kebutuhannya dengan GNU Make.

‘Makefile’ sederhana untuk proyek yang ada di tutorial awal kita dapat ditulis sebagai berikut :

CC=gcc 
CFLAGS=-Wall 
main: main.o hello_fn.o 

clean: 
rm -f main main.o hello_fn.o

File dapat dibaca seperti ini :

Menggunakan kompiler gcc, dengan opsi kompilasi -Wall, membuat file target eksekutabel main dari file-file objek main.o dan hello_fn.o (yang akan dibangun via aturan implisit dari main.c dan hello_fn.c). Target clean tidak memiliki dependencies dan secara sederhana menghapus semua file-file kompilasi. Opsi -f (force) di perintah rm memaksa laporan error apapun untuk tidak dihiraukan.

Untuk menggunakan makefile, ketikkan make. Ketika dilakukan tanpa argumen lain, target pertama dari makefile adalah membangun, dan menghasilkan file eksekutabel bernama “main”.

$ make 
gcc -Wall -c -o main.o main.c 
gcc -Wall -c -o hello_fn.o hello_fn.c 
gcc main.o hello_fn.o -o main 

$ ./main 
Hello, world!

Untuk membangun ulang eksekutabel  setelah memodifikasi suatu file sumber, cukup ketikkan make lagi. Dengan memeriksa timestamps dari target dan file-file dependency, make mengindentifikasi file-file yang telah dirubah dan membangun kembali file-file yang diperlukan untuk mengupdate target.

$ emacs 
main.c (edit the file) 
$ make 
gcc -Wall -c -o main.o main.c 
gcc main.o hello_fn.o -o main 

$ ./main 
Hello, everyone!

Terakhir, untuk menghapus file yang telah dibuat, ketikkan  make clean:

$ make clean 
rm -f main main.o hello_fn.o

makefile yang lebih baik biasanya berisi target-target tambahan untuk instalasi (make install) dan testing (make check).

Bersambung .. (rezaervani@gmail.com)

Serial Sebelumnya

.