Giới thiệu
Trong lab này, bạn sẽ học cách sử dụng lệnh make
của Linux để tự động hóa quá trình xây dựng và biên dịch phần mềm từ mã nguồn. Bạn sẽ bắt đầu bằng cách hiểu mục đích và cú pháp của lệnh make
, sau đó tạo một Makefile đơn giản và biên dịch một chương trình C. Cuối cùng, bạn sẽ khám phá việc sử dụng các biến và target của Makefile.
Lab này bao gồm các kỹ năng thiết yếu trong lĩnh vực Scripting and Programming, cung cấp các ví dụ thực tế và kinh nghiệm thực hành với lệnh make
. Các bước được nêu trong lab sẽ hướng dẫn bạn quy trình thiết lập Makefile, quản lý các dependency và biên dịch chương trình C của bạn một cách hiệu quả.
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ụ được sử dụng để tự động hóa quá trình xây dựng và biên dịch phần mềm từ mã nguồn.
Đầu tiên, hãy hiểu mục đích của lệnh make
. Lệnh make
đọc một file gọi là "Makefile" chứa các hướng dẫn về cách xây dựng 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
là:
make [target]
Trong đó [target]
là tên của target bạn muốn xây dựng. Nếu không có target nào được chỉ định, make
sẽ xây dựng 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
, đến lượt 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 thử nó. Đầ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ờ, hãy chạy lệnh make
:
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
.
Tạo một Makefile Đơn Giản và Biên Dịch một 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à sử dụng nó để biên dịch một 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 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 có tên là hello
phụ thuộc vào file hello.c
. Lệnh gcc
được sử 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, hãy 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ây giờ bạn có thể chạy chương trình hello
:
./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à Target của Makefile
Trong bước này, bạn sẽ học cách sử dụng các biến và target trong Makefile để làm cho quá trình xây dựng của bạn linh hoạt và dễ bảo trì hơn.
Hãy bắt đầu bằng cách sửa đổi Makefile mà chúng ta đã tạo ở bước trước. Mở 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 này, chúng ta đã giới thiệu hai biến:
CC
: Biến này lưu trữ tên của trình biên dịch C để sử dụng. Chúng ta đã đặt nó thànhgcc
.CFLAGS
: Biến này lưu trữ các flag biên dịch để sử dụng. Chúng ta đã đặt nó thành-Wall -Wextra -O2
, cho phép các cảnh báo trình biên dịch bổ sung và tối ưu hóa mã đã biên dịch.
Chúng ta cũng đã cập nhật lệnh biên dịch để sử dụng các biến này:
$(CC) $(CFLAGS) -o hello hello.c
Điều này làm cho Makefile linh hoạt hơn, vì bạn có thể dễ dàng thay đổi trình biên dịch hoặc các flag biên dịch bằng cách sửa đổi các giá trị biến.
Bây giờ, hãy thử xây dựng lại chương trình hello
bằng Makefile đã cập nhật:
make
Ví dụ đầu ra:
gcc -Wall -Wextra -O2 -o hello hello.c
Lệnh make
đã sử 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 các target bổ sung trong Makefile. Ví dụ: hãy thêm target 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
Bây 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
.
Tóm tắt
Trong lab này, bạn đã tìm hiểu về mục đích và cú pháp của lệnh make
trong Linux, được sử dụng để tự động hóa quá trình xây dựng và biên dịch phần mềm từ mã nguồn. Bạn đã tạo một Makefile đơn giản và sử dụng nó để biên dịch một chương trình C, hiểu cách định nghĩa các dependency và xây dựng các target. Ngoài ra, bạn đã khám phá việc sử dụng các biến và target của Makefile để làm cho quá trình xây dựng linh hoạt và có thể tái sử dụng hơn.