GNU/Linux >> Belajar Linux >  >> Linux

Dapatkah Anda membuatnya? Kompilasi Program C di Linux Menggunakan Make Command

Saat Anda menginstal perangkat lunak apa pun dari sumber, Anda biasanya menjalankan perintah seperti — “make”, “make install”, "make clean", dll. Pernahkah Anda bertanya-tanya apa sebenarnya yang dibuat oleh semua perintah make ini? Tentu, kita tahu bahwa ia sedang mencoba untuk mengkompilasi dan menginstal perangkat lunak. Tapi, mengapa membuat? Apa fungsinya?

Untuk mengkompilasi program C tunggal, perintah cc sangat membantu. Untuk mengkompilasi beberapa program C, utilitas Make sangat membantu.

Selain itu, pemrogram dan sysadmin C akan merasa terbantu untuk mengotomatiskan tugas terkait kompilasi menggunakan utilitas make. Dalam artikel ini, mari kita tinjau cara menggunakan perintah make.

1. Buat Makefile untuk Kompilasi Sederhana

Mari kita asumsikan bahwa Anda memiliki contoh file program C bernama helloworld.c. Menggunakan perintah cc, biasanya Anda akan mengkompilasinya seperti yang ditunjukkan di bawah ini.

$ cc -o helloworld helloworld.c

Meskipun Anda tidak perlu menggunakan make untuk mengkompilasi satu program, contoh berikut akan memberi Anda gambaran tentang cara menggunakan make. Buat makefile seperti yang ditunjukkan di bawah ini.

$ vim makefile
helloworld : helloworld.c
	cc -o helloworld helloworld.c

Jalankan make untuk membuat helloworld dapat dieksekusi seperti yang ditunjukkan di bawah ini.

$ make helloworld

(or)

$ make

Karena makefile hanya berisi satu target “helloworld”, Anda juga dapat memanggil perintah make tanpa argumen seperti yang ditunjukkan di atas.”make”.

Harap pastikan bahwa makefile dan kode sumber ada di direktori yang sama, jika tidak, tentukan jalur masing-masing file sumber di makefile.

Secara default, perintah make mengharapkan nama file make menjadi Makefile atau makefile . Jika nama file make berbeda dari keduanya, Anda harus menentukannya ke perintah make menggunakan opsi -f seperti yang ditunjukkan di bawah ini.

$ make -f sample.txt

Bagi yang baru mengenal C, baca artikel C Hello World Program.

2. Buat Makefile untuk Mengkompilasi Lebih dari Satu File

Untuk kompilasi beberapa file, mari kita gunakan tiga file — getname.c, getaccno.c dan main.c.

Berdasarkan ketiga file *.c ini, mari kita buat sebuah executable bernama “getinto”.

Menggunakan perintah cc, Anda biasanya melakukan kompilasi seperti yang ditunjukkan di bawah ini.

$ cc -o getinfo main.c getname.c getaccno.c header.h

Anda juga dapat mengkompilasi file *.c individual seperti yang ditunjukkan di bawah ini dan akhirnya membuat "getinfo" yang dapat dieksekusi seperti yang ditunjukkan di bawah ini.

$ cc -c getname.c
$ cc -c getaccno.c
$ cc -c main.c
$ cc -o getinfo main.o getname.o getaccno.o header.h

Dengan menggunakan utilitas make ramah kami, Anda dapat melakukan ini secara efektif seperti yang ditunjukkan di bawah ini.

$ vim makefile
getinfo:getname.o getaccno.o main.o header.h 
	cc -o getinfo getname.o getaccno.o main.o header.h 
main.o:main.c 
	cc -c main.c 
getaccno.o:getaccno.c 
	cc -c getaccno.c 
getname.o:getname.c 
	cc -c getname.c 

Terakhir, jalankan perintah make seperti yang ditunjukkan di bawah ini.

$ make getinfo 

Catatan: Setiap kali perintah make dipanggil, ia hanya memeriksa dan mengkompilasi file yang dimodifikasi. Ini sangat besar untuk programmer C, di mana mereka biasanya memiliki beberapa file C, dan mengkompilasi seluruh proyek beberapa kali selama fase pengembangan.

Anda juga dapat menggunakan gdb untuk men-debug program C.

3. Tambahkan Target untuk Proses Pembersihan

Di dalam makefile (atau Makefile), Anda juga dapat menambahkan target untuk membersihkan file objek, seperti yang ditunjukkan di bawah ini.

clean : 
	rm getname.o getaccno.o main.o

Sekarang Anda dapat membersihkan file objek dari direktori saat ini seperti yang ditunjukkan di bawah ini.

$ make clean

Catatan: Alih-alih menentukan file *.o individual dalam perintah rm, Anda juga dapat memberikan rm *.o.

Anda juga dapat membuat file arsip C (*.a) menggunakan perintah ar.

4. Penanganan Variabel di Makefile

Di dalam makefile (atau Makefile) Anda dapat menggunakan variabel, yang dapat digunakan di seluruh makefile. Contoh penggunaan ditunjukkan di bawah ini, di mana $obj berisi semua nama file objek.

$ vim makefile
obj= getname.o getaccno.o main.o
getinfo: $(obj) header.h
	cc -o getinfo getname.o getaccno.o main.o header.h
main.o:main.c
	cc -c main.c
getaccno.o:getaccno.c
	cc -c getaccno.c
getname.o:getname.c
	cc -c getname.c

clean:
	rm getinfo $(obj)

5. Menyederhanakan Makefile Lebih Lanjut

Make utility secara implisit memanggil perintah cc -c untuk menghasilkan file .o untuk file .c yang sesuai. Kami benar-benar tidak perlu menentukan "cc -c" di dalam makefile. Jadi, kita dapat menulis ulang makefile untuk mencerminkan aturan implisit ini seperti yang ditunjukkan di bawah ini.

$ vim makefile
obj= getname.o getaccno.o main.o
getinfo: $(obj) header.h
	cc -o getinfo getname.o getaccno.o main.o header.h
main.o:
getaccno.o:
getname.o:
clean:
	rm getinfo $(obj)

6. Sisipkan Pesan Debug di dalam Makefile

Saat Anda mengkompilasi proyek besar, Anda mungkin ingin menampilkan beberapa pesan ramah. Utilitas Make dapat mencetak pesan ke output standar, yang mungkin membantu Anda men-debug masalah potensial apa pun dalam proses make. Gunakan pernyataan @echo di seluruh makefile Anda seperti yang ditunjukkan di bawah ini untuk menampilkan pesan khusus.

$ vim makefile
obj= getname.o getaccno.o main.o
getinfo: $(obj) header.h
	cc -o getinfo getname.o getaccno.o main.o header.h	
	@echo "make complete."
main.o:
getaccno.o:
getname.o:
clean:
	rm getinfo $(obj)
	@echo "getinfo, $(obj) files are removed."	

Di sana Anda memilikinya. Make bukan misteri lagi. Jika Anda menyukai artikel ini, silakan tandai dengan enak, atau tersandung.


Linux
  1. Cara Reboot Linux Menggunakan Command Line

  2. Menggunakan Perintah ripgrep (rg) di Linux

  3. Bagaimana cara mematikan proses di Linux menggunakan perintah?

  1. Cara men-debug program C di Linux menggunakan gdb

  2. Menggunakan Perintah Tidur Linux di Skrip Bash

  3. Bagaimana saya bisa menemukan versi shell saya menggunakan perintah Linux?

  1. 5 Contoh Perintah Fuser Linux Praktis

  2. Contoh penggunaan perintah dmsetup di Linux

  3. Pindahkan folder di Linux menggunakan perintah mv