Lệnh make trong linux với các ví dụ dễ hiểu

Lệnh make trong Linux là một công cụ tự động hóa việc biên dịch và liên kết chương trình từ mã nguồn. Nó sử dụng file Makefile để xác định các quy tắc và phụ thuộc, giúp quá trình build trở nên dễ dàng hơn. Với make, bạn có thể biên dịch lại chỉ những phần đã thay đổi, tiết kiệm thời gian đáng kể.

Lệnh make trong linux là gì?

Lệnh command make in linux là một công cụ tự động hóa việc biên dịch và liên kết các chương trình từ mã nguồn. Nó đọc một tệp tin có tên là Makefile, chứa các quy tắc và hướng dẫn để xây dựng ứng dụng. Make giúp đơn giản hóa quá trình biên dịch, đặc biệt đối với các dự án lớn có nhiều tệp tin phụ thuộc lẫn nhau. Thay vì phải gõ từng lệnh biên dịch, bạn chỉ cần chạy make, nó sẽ tự động thực hiện các bước cần thiết. Điều này giúp tiết kiệm thời gian và giảm thiểu sai sót trong quá trình phát triển phần mềm, làm cho việc quản lý dự án trở nên dễ dàng hơn.

Tìm hiểu Mục đích và Cú pháp của Lệnh make

Trong bước này, bạn sẽ tìm hiểu về mục đích và cú pháp của lệnh make trong Linux. Lệnh make là một công cụ dùng để tự động hóa quá trình build và biên dịch phần mềm từ mã nguồn.

Đầu tiên, hãy cùng tìm hiểu mục đích của lệnh make là gì nhé. Lệnh make đọc một file gọi là "Makefile", chứa các chỉ dẫn về cách build một chương trình hoặc dự án.

Makefile chỉ định các dependency giữa các file mã nguồn khác nhau, cũng như các lệnh cần thiết để biên dịch và liên kết chương trình.

Cú pháp cơ bản của lệnh make như sau:

make [target]

Trong đó [target] là tên của target bạn muốn build. Nếu không có target nào được chỉ định, make sẽ build target đầu tiên được định nghĩa trong Makefile.

Đây là một ví dụ về một Makefile đơn giản:

all: hello

hello: hello.c
    gcc -o hello hello.c

Trong ví dụ này, target all phụ thuộc vào target hello, target này lại phụ thuộc vào file mã nguồn hello.c. Khi bạn chạy make, nó sẽ biên dịch file hello.c và tạo ra file thực thi hello.

Hãy cùng thử nhé. Đầu tiên, tạo file hello.c:

nano hello.c

Thêm nội dung sau:

#include <stdio.h>

int main() {
    printf("Hello, world!\n");
    return 0;
}

Lưu và thoát trình soạn thảo.

Bây giờ, chạy lệnh make:

make

Ví dụ về output:

gcc -o hello hello.c

Lệnh make đã biên dịch file hello.c và tạo ra file thực thi hello.

Tạo một Makefile đơn giản và biên dịch chương trình C

Trong bước này, bạn sẽ học cách tạo một Makefile đơn giản và dùng nó để biên dịch chương trình C.

Đầu tiên, hãy tạo một file C mới có tên hello.c trong thư mục ~/project:

nano ~/project/hello.c

Thêm nội dung sau vào file:

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

Lưu và thoát khỏi trình soạn thảo.

Bây giờ, hãy tạo một Makefile đơn giản trong thư mục ~/project:

nano ~/project/Makefile

Thêm nội dung sau vào Makefile:

all: hello

hello: hello.c
    gcc -o hello hello.c

Makefile này định nghĩa một target tên là hello phụ thuộc vào file hello.c. Lệnh gcc được dùng để biên dịch file hello.c và tạo ra file thực thi hello.

Để biên dịch chương trình bằng Makefile, chạy lệnh sau trong thư mục ~/project:

make

Ví dụ đầu ra:

gcc -o hello hello.c

Lệnh make đã biên dịch file hello.c và tạo ra file thực thi hello.

Bạn có thể chạy chương trình hello bây giờ:

./hello

Ví dụ đầu ra:

Hello, World!

Lệnh make đã biên dịch thành công chương trình C bằng Makefile.

Sử dụng Biến và Mục tiêu trong Makefile

Trong bước này, bạn sẽ học cách dùng biến và mục tiêu trong Makefile để quy trình build linh hoạt và dễ bảo trì hơn.

Hãy bắt đầu bằng cách chỉnh sửa Makefile đã tạo ở bước trước, mở file Makefile trong thư mục ~/project:

nano ~/project/Makefile

Cập nhật Makefile với nội dung sau:

CC = gcc
CFLAGS = -Wall -Wextra -O2

all: hello

hello: hello.c
    $(CC) $(CFLAGS) -o hello hello.c

Trong Makefile đã cập nhật, chúng ta đã thêm hai biến:

  1. CC: Biến này lưu tên của trình biên dịch C sẽ dùng, ở đây ta đặt là gcc.
  2. CFLAGS: Biến này lưu các flag biên dịch sẽ dùng, ta đặt là -Wall -Wextra -O2 để bật cảnh báo và tối ưu code.

Chúng ta cũng đã cập nhật lệnh biên dịch để dùng các biến này:

    $(CC) $(CFLAGS) -o hello hello.c

Điều này giúp Makefile linh hoạt hơn, bạn có thể dễ dàng thay đổi trình biên dịch hoặc flag biên dịch bằng cách sửa giá trị biến.

Bây giờ, hãy thử build chương trình hello lại bằng Makefile đã cập nhật:

make

Ví dụ đầu ra:

gcc -Wall -Wextra -O2 -o hello hello.c

Lệnh make đã dùng các biến được định nghĩa trong Makefile để biên dịch file hello.c.

Bạn cũng có thể định nghĩa thêm các mục tiêu khác trong Makefile, ví dụ, thêm mục tiêu clean để xóa file thực thi hello đã biên dịch:

CC = gcc
CFLAGS = -Wall -Wextra -O2

all: hello

hello: hello.c
    $(CC) $(CFLAGS) -o hello hello.c

clean:
    rm -f hello

Giờ bạn có thể chạy make clean để xóa file thực thi hello:

make clean

Ví dụ đầu ra:

rm -f hello

Lệnh make clean đã xóa file thực thi hello.

Kết luận cho linux make command

Tóm lại, lệnh make là một công cụ vô cùng hữu ích giúp bạn tự động hóa quá trình biên dịch và quản lý dự án phần mềm. Nó giúp bạn tiết kiệm thời gian và công sức bằng cách chỉ biên dịch lại những phần code đã thay đổi. Với một Makefile được thiết kế tốt, bạn có thể dễ dàng xây dựng, kiểm tra và triển khai dự án của mình một cách nhất quán. Hãy nhớ rằng, việc hiểu rõ cú pháp và cách hoạt động của Makefile là chìa khóa để sử dụng hiệu quả linux make command. Đừng ngần ngại thử nghiệm và tìm hiểu thêm các tính năng nâng cao của make để tối ưu hóa quy trình làm việc của bạn. Hy vọng bài viết này đã cung cấp cho bạn một cái nhìn tổng quan và hữu ích về lệnh make trong Linux. Chúc bạn thành công trên con đường phát triển phần mềm!

Last Updated : 17/10/2025