NỘI DUNG

Hosting tốc độ cao Vietnix - tốc độ tải trang trung bình dưới 1 giây
VPS siêu tốc Vietnix - trải nghiệm mượt mà, ổn định
12/02/2025
Lượt xem

Tổng quan về Makefile là gì? Cách viết makefile đơn giản

12/02/2025
26 phút đọc
Lượt xem

Đánh giá

Makefile là một trong những công cụ không thể thiếu, giúp tự động hóa các tác vụ này, giảm thiểu lỗi và tiết kiệm thời gian cho các nhà phát triển. Bài viết dưới đây sẽ đi sâu vào khái niệm Makefile trong Linux, từ cú pháp cơ bản đến các ví dụ thực tế, giúp bạn hiểu rõ hơn về công cụ mạnh mẽ này để tối ưu hóa quy trình làm việc của mình.

Những điểm chính

  • Định nghĩa Makefile: Giới thiệu khái niệm Makefile, vai trò trong việc tự động hóa biên dịch và quản lý dự án.
  • Cách hoạt động của makefile: Giải thích cách Makefile hoạt động, tổ chức lệnh và quy tắc để thực thi các nhiệm vụ.
  • Cú pháp của makefile: Hướng dẫn cú pháp cơ bản trong Makefile để tạo và quản lý quy trình build.
  • Đặt mục tiêu (Targets): Giới thiệu cách đặt mục tiêu (targets) trong Makefile để thực thi các nhiệm vụ cụ thể.
  • Wildcards – ký tự đại diện: Giải thích về ký tự đại diện trong Makefile giúp linh hoạt trong việc định nghĩa tệp và mục tiêu.
  • Các quy tắc nâng cao: Giới thiệu các quy tắc nâng cao như static pattern rules và double-colon rules để tối ưu hóa Makefile.
  • Điều kiện trong Makefiles: Cách sử dụng điều kiện kiểm tra giá trị của biến trong Makefile.
  • Hàm trong Makefiles: Giới thiệu các hàm cơ bản và nâng cao như foreach, if, call, shell trong Makefile.
  • Tính năng makefile khác: Trình bày một số tính năng bổ sung như multiline, .phony và .delete_on_error để tối ưu hóa Makefile.
  • Biết đến Vietnix – Nhà cung cấp dịch vụ VPS linh hoạt và hiệu suất cao.

Makefile là gì?

Makefile là một tiện ích dạng dòng lệnh trên hệ điều hành Linux, giúp tự động hóa quá trình biên dịch chương trình, đặc biệt là các chương trình lớn. Lệnh xác định phần nào của chương trình cần được biên dịch lại khi có thay đổi ở một số file nguồn.

Makefile là một tiện ích giúp tự động hóa quá trình biên dịch
Makefile là một tiện ích giúp tự động hóa quá trình biên dịch

Makefile sử dụng một file cấu hình (thường có tên “Makefile” hoặc “makefile”) chứa các quy tắc và lệnh cần thực thi. Các dự án mã nguồn mở thường dùng make để biên dịch chương trình thực thi và sử dụng lệnh make install để cài đặt. Trong bài viết này, mình sẽ tập trung vào ngôn ngữ C/C++, vì ngôn ngữ này thường được biên dịch trực tiếp, trong khi các ngôn ngữ khác có thể sử dụng công cụ biên dịch riêng.

Cú pháp makefile trong Linux

Mỗi Makefile gồm một tập hợp các rule và mỗi rule được hiểu như sau:

<targets>: <prerequisite>
<command>
<command>
<command>

Trong đó có ba thành phần chính:

  • <target>: Chỉ định tên file, phân chia bằng dấu cách. Mỗi rule chỉ dành cho 1 target.
  • <prerequisite>: Tên các file mà mục tiêu phụ thuộc vào. Các file này buộc phải tồn tại trước khi các lệnh tạo mục tiêu được thực thi.
  • <command>: Các hành động hoặc bước để tạo ra mục tiêu. Bắt buộc phải bắt đầu mỗi lệnh bằng một ký tự tab (không phải dấu cách). Nếu dùng dấu cách, make sẽ báo lỗi.

Phiên bản của makefile

Hầu hết các lệnh được sử dụng có liên quan makefile đều có thể hoạt động trên cả phiên bản 3 và 4. Để biết được phiên bản hiện tại, bạn gõ lệnh sau:

make - version
Xem phiên bản lệnh make
Xem phiên bản lệnh make

Cách thức hoạt động của makefile

Makefile tự động biên dịch các source file cần biên dịch dựa trên việc phát hiện các thay đổi. Với ngôn ngữ thông dịch, việc biên dịch lại là không cần thiết vì chương trình luôn sử dụng phiên bản mới nhất của file. Makefile hoạt động dựa trên biểu đồ phụ thuộc giữa các file. Nếu một file phụ thuộc (dependency) bị thay đổi, file sử dụng các phụ thuộc đó cũng sẽ được biên dịch lại.

Đặc biệt, khi sử dụng Makefile để biên dịch các dự án lớn hoặc xử lý đa nhiệm, đòi hỏi môi trường máy chủ có tốc độ cao và khả năng vận hành ổn định. Với dịch vụ VPS NVMe của Vietnix, bạn sẽ được trang bị 100% ổ cứng NVMe tốc độ cao và CPU Intel Platinum thế hệ mới, cho tốc độ xử lý nhanh gấp 10 lần so với SSD thông thường. Dịch vụ VPS còn kết hợp với băng thông 400 Mbps, cam kết uptime 99.9%, Vietnix đảm bảo hiệu suất tối ưu, giúp bạn rút ngắn thời gian biên dịch và xử lý tác vụ phức tạp.

Cách hoạt động của Make
Cách hoạt động của Make

Hiển thị “Hello World”

Trước khi tiếp tục, bạn hãy thử thực hiện một ví dụ về makefile để hiểu cách viết và thực thi make. Nếu máy tính của bạn chưa có lệnh make, hãy cài đặt như sau:

sudo apt install make

Bạn tạo một file mới và thêm nội dung vào file đó, tên file này phải là “Makefile” hoặc “makefile”.

Đặt tên file
Đặt tên file

Sau đó bạn hãy nhập lệnh make trong Terminal để thực thi file vừa tạo.

Thực thi make file
Thực thi make file

Các ví dụ cho người mới

Bạn đã nắm được cách viết và thực thi lệnh make. Bây giờ sẽ đến bước tìm hiểu kiến thức cơ bản, 3 thành phần chính: target – prerequisite – command thông qua vài ví dụ đơn giản. Bạn hãy thử tạo một “makefile” có 3 rule riêng biệt mà khi thực thi sẽ tạo thành một chương trình có tên là test qua các bước sau:

  1. Make đưa ra test là target, nó sẽ chọn tìm kiếm mục tiêu này.
  2. test sẽ yêu cầu test.o, makefile sẽ chuyển sang tìm kiếm “test.o”.
  3. test.o yêu cầu test.c để tìm kiếm mục tiêu này.
  4. test.c không có phụ phuộc nên sẽ chạy lệnh echo.
  5. Lệnh cc -c sẽ chạy khi tất cả phần phụ thuộc của test.o hoàn tất.
  6. Lệnh cc chạy ngay sau đó.
Ví dụ cơ bản về makefile
Ví dụ cơ bản về makefile

Tiếp theo, bạn cho thực thi makefile test với lệnh sau để kiểm tra kết quả:

make test

Ở ví dụ khác, bạn sẽ chỉ có 1 file tên a_file, khi target được chỉ định sẽ là chính là file này.

Chỉ định thực hiện về a_file
Chỉ định thực hiện về a_file

Khi bạn thực thi Makefile, bạn sẽ nhận được kết quả như sau:

Thêm lệnh mới vào makefile
Thêm lệnh mới vào makefile

Sau đó, bạn tiếp tục thêm vào file lệnh tạo file mới.

Thêm lệnh mới vào makefile
Thêm lệnh mới vào makefile

Bạn thực thi file và nhận được kết quả sau:

Thực thi makefile và xem kết quả
Thực thi makefile và xem kết quả

Kết quả hiển thị không có gì đặc biệt, bên cạnh đó bạn đã tạo file có tên a_file mà bạn đang nhìn thấy qua lệnh ls.

Cập nhật make file
Cập nhật make file

Bạn hãy tăng độ phức tạp lên một chút bằng cách cho a_file phụ thuộc vào b_file. Thông thường, mục tiêu (target) sẽ kiểm tra danh sách các phụ thuộc. Nếu bất kỳ phụ thuộc (dependency) nào có mốc thời gian cũ hơn mục tiêu, make sẽ thực thi lệnh để cập nhật chúng, sau đó xử lý phần còn lại. Ngược lại, nếu tất cả các phụ thuộc đều tồn tại và không có thay đổi nào, make sẽ bỏ qua việc thực thi lệnh, vì các mục tiêu đã được cập nhật và không cần biên dịch lại.

Cho a_file phụ thuộc b_file
Cho a_file phụ thuộc b_file

Khi bạn thực thi lại file thì kết quả sẽ như sau:

Thực thi makefile
Thực thi makefile

Đặt mục tiêu

Nếu bạn muốn đặt nhiều mục tiêu (target) và chạy tất cả thì bạn chỉ cần gấn tất cả thành target như sau:

Đặt mục tiêu vào makefile
Đặt mục tiêu vào makefile

Bạn tiến thành chạy lệnh make và nhận kết quả sau:

Thực thi makefile
Thực thi makefile

Ngoài ra, bạn còn có thể đặt nhiều target (Multiple targets) nằm chung một rule, lệnh sẽ thực thi chạy từng target đã chỉ định. Cụ thể bạn dùng biến tự động là $@ để chứa tên target.

Đặt nhiều mục tiêu
Đặt nhiều mục tiêu

Kết quả khi thực thi lệnh make như sau:

Thực thi makefile
Thực thi makefile

Biến (Variables)

Biến trong Make chỉ có định dạng chuỗi thông thường mà không thể sử dụng kiểu biến khác như integer (số nguyên) hay float (số thập phân). Để hiểu hơn, bạn có thể xem qua ví dụ sau:

Đặt biến trong makefile
Đặt biến trong makefile

Bạn hãy thực thi makefile và nhận được kết quả sau:

Hiển thị biến trong makefile
Hiển thị biến trong makefile

Ở một ví dụ tiếp theo, biến tham chiếu sử dụng $() hoặc ${}:

Sử dụng $() và ${} cho biến tham chiếu
Sử dụng $() và ${} cho biến tham chiếu

Trong ví dụ này bạn sẽ thấy kết quả khi gán biến như sau:

Thực thi file make
Thực thi file make

Flavors và modification

Trong Makefile có 2 kiểu biến flavor như sau:

  • = (recursive): Giá trị của biến chỉ được tính toán (đánh giá) khi biến đó được sử dụng trong một lệnh.
  • := (simply expanded): Chỉ những giá trị đã được định nghĩa tại thời điểm khai báo mới được sử dụng.

Dưới đây là ví dụ giúp bạn hiểu hơn về 2 kiểu biến này:

Sử dụng biến flavor
Sử dụng biến flavor

Bạn thực thi makefile và sẽ thấy kết quả sau:

Thực thi makefilfe
Thực thi makefilfe

Biến mở rộng giúp bạn thêm biến mới như ví dụ sau:

Mở rộng biến
Mở rộng biến

Bạn có thể kết hợp 2 biến flavor để tạo kết quả mới.

Thực thi file
Thực thi file

Bên cạnh đó, còn một biến nữa là ?=, được dùng để gán biến nếu các biến đó chưa được thiết lập, bạn có thể xem qua ví dụ sau.

Sử dụng phép gán biến "?="
Sử dụng phép gán biến “?=”

Khi tiến hành thực thi makefile, bạn sẽ nhận được kết quả sau:

Thực thi makefile
Thực thi makefile

Tình huống tiếp theo là việc đưa khoảng trắng vào trong biến. Bạn hoàn toàn có thể sử dụng biến có khoảng trắng, nhưng chỉ có thể giữ khoảng trắng ở cuối dùng, ở đầu dòng sẽ bị xóa. Do đó nếu bạn cần khoảng trắng này, hãy tạo biến tên là $(nullstring).

Sử dụng biến nullstring
Sử dụng biến nullstring

Bạn tiến hành thực thi makefile và nhận được kết quả sau:

Thực thi file
Thực thi file

Nếu trong trường hợp bạn không khai báo, định nghĩa biến thì make sẽ trả về chuỗi rỗng. Nhưng ở đây, mình sẽ cho hiển thị giá trị của biến tên vietnix, mà không cần khai báo hay gán bất kỳ thứ gì vào biến này, nghĩa là bạn không cần định nghĩa biến.

Không khai báo biến
Không khai báo biến

Khi thực thi lệnh make, vì lí do trên nên hệ thống sẽ trả về kết quả trống.

Thực thi makefile
Thực thi makefile

Đối số lệnh và ghi đè giá trị

Bạn có thể ghi đè các biến bằng cách sử dụng override như ví dụ sau:

29 Command line arguments and override
Đối số và tiến hành ghi đè

Kết quả như sau:

Tiến hành thực thi make và trả về kết quả
Tiến hành thực thi make và trả về kết quả

Danh sách command và “define”

Có sự hiểu lầm define là một hàm. Tuy nhiên, define chỉ là danh sách các lệnh. Bạn có thể hiểu hơn ở ví dụ sau:

Sử dụng define trong make
Sử dụng define trong make

Kết quả sau khi thực hiện makefile:

Kết quả thực thi makefile
Kết quả thực thi makefile

Chỉ định biến cho mục tiêu

Bạn cũng có thể gán biến cho target cụ thể tương tự ví dụ sau:

Chỉ định biến cho mục tiêu
Chỉ định biến cho mục tiêu

Sau khi bạn thực thi, kết quả trả về như sau:

Thực thi makefile
Thực thi makefile

Chỉ định biến cho pattern

Các biến cũng có thể được thiết lập cho các pattern cụ thể như ví dụ bên dưới:

Chỉ định biến cho pattern
Chỉ định biến cho pattern

Kết quả thực thi makefile như sau:

Kết quả thực thi make file
Kết quả thực thi make file

Biến tự động

Trên thực tế, có khá nhiều biến tự động mà bạn có thể áp dụng trong makefile nhưng chỉ số ít là hiển thị lên màn hình.

37 automatic variable
Khởi tạo biến tự động

Kết quả trả về như sau:

Thực thi biến tự động
Thực thi biến tự động

Wildcards – Ký tự đại diện

Bạn có thể dùng * hoặc % để làm ký tự wildcard, nhưng cả 2 lại có nghĩa khác nhau, bạn hãy xem ví dụ bên dưới để thấy sự khác biệt này.

  • Kí tự * : Có chức năng là dò trong filesystem để tìm ra file có tên phù hợp.
Kí tự đại diện *
Kí tự đại diện *
  • Kí tự % : Kí tự này dùng trong các tình huống sau.
    • Trùng khớp 1 hoặc nhiều ký tự (gọi là stem).
    • Lấy stem đó và thay bằng 1 chuỗi.
    • Dùng trong rule định nghĩa (definition) và các hàm cụ thể.

Quy tắc ngầm

Khi make biên dịch chương trình c, lệnh sử dụng các quy tắc tự động và gọi các rule này là “quy tắc ngầm” này. Sau đây là danh sách các quy tắc ngầm:

  • Compiling chương trình C: “n.o” được tạo tự động “n.c” với lệnh dạng của giá trị $(CC) -c $(CPPFLAGS) $(CFLAGS)
  • Compiling chương trình C++: “n.o” được tạo tự động từ “n.cc” hoặc “n.cpp” với lệnh của dạng giá trị $(CXX) -c $(CPPFLAGS) $(CXXFLAGS).
  • Liên kết một object file: “n” được tạo tự động từ “n.o” bằng cách thực thi lệnh $(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS).
icon

Ví dụ: Để xây dựng chương trình C, mà không cần chỉ dẫn cách biên dịch cho make. Bạn thực hiện như sau:

Liên kết một object file
Liên kết một object file

Quy tắc pattern tĩnh

Quy tắc này là một cách khác để bạn có thể viết ít hơn trong lệnh Makefile, cú pháp như sau:

targets...: target-pattern: prereq-patterns ...
commands

Ý tưởng ban đầu là target chỉ định sẽ trùng khớp với target-pattern (thông qua kí tự đại diện %), bạn hãy xem qua ví dụ sau:

Quy tắc pattern tĩnh
Quy tắc pattern tĩnh

Quy tắc pattern tĩnh và bộ lọc

Bộ lọc có thể dùng trong quy tắc pattern tĩnh để so trùng với các file chính xác. Ví dụ: Tạo phần mở rộng .raw.result.

Bộ lọc và quy tắc pattern tĩnh
Bộ lọc và quy tắc pattern tĩnh

Quy tắc pattern

Quy tắc này được sử dụng tốt nhất trong 2 trường hợp sau:

  • Xác định các quy tắc ngầm của riêng bạn.
Quy tắc ngầm tạo bới user
Quy tắc ngầm tạo bới user
  • Dạng đơn giản hơn của quy tắc pattern tĩnh.
Quy tắc pattern tĩnh
Quy tắc pattern tĩnh

Quy tắc hai chấm đôi

Quy tắc này rất ít được sử dụng, chức năng của double-colon cho phép nhiều rule được định nghĩa cho cùng target. Khi sử dụng cần phải cẩn thận nhầm lẫn mới dấu đơn, cảnh báo lỗi sẽ xuất hiện và bỏ qua file đầu tiên.

Quy tắc dấu hai chấm đôi
Quy tắc dấu hai chấm đôi

Kết quả trả về:

Thực thi makefile
Thực thi makefile

Lệnh echoing/silencing

Để dừng lệnh hiển thị như lệnh echo, bạn thêm kí hiệu @ (at the rate) trước lệnh đó. Bên cạnh đó, bạn cũng dùng được lệnh make với tùy chọn -s để thêm @ trước mỗi dòng.

Lệnh echo và kí hiệu sliencing
Lệnh echo và kí hiệu sliencing

Kết quả: Bạn sẽ thấy được dòng echo đầu đã bị chặn không cho hiển thị trên màn hình mà chỉ dòng echo thứ hai mới được phép.

Thực thi makefile
Thực thi makefile

Shell mặc định

Khi nhắc về shell trên Linux,  thì shell mặc định của makefile nằm ở /bin/sh nhưng bạn lại có thể thay đổi khi sử dụng biến SHELL như ví dụ sau:

Thay đổi Shell mặc định
Thay đổi Shell mặc định

Kết quả như sau:

Thực thi makefile
Thực thi makefile

Xử lý lỗi

Bạn sẽ xử lý lỗi khác nhau bằng cách dùng các kí tự dưới đây:

  • -k : Tiếp tục thực thi kể cả gặp lỗi.
  • : Dùng trước dòng lệnh để ẩn lỗi đi.
  • -i : HIển thị chi tiết có những gì diễn ra ở mỗi lệnh.
Xử lý lỗi
Xử lý lỗi

Kết quả trả về như sau:

Makefile xử lý lỗi
Makefile xử lý lỗi

Sử dụng đệ quy make

Nếu bạn muốn gọi đệ quy một makefile thì bạn hãy dùng biến đặc biệt là $(MAKE) thay vì make. Vì biến sẽ bỏ qua make flag và không ảnh hưởng bởi chính biến đó. Bạn có thể tham khảo ví dụ sau:

Lệnh make có đệ quy
Lệnh make có đệ quy

Kết quả trả về như sau:

Thực thi makefile
Thực thi makefile

Dùng export gọi makefile đệ quy

Có một cách khác để gọi makefile đệ quy là dùng export. Directive này sẽ lấy 1 biến và cho biến đó truy cập được vào lệnh hiện có trong make, được gọi là submake.

Dùng export để gọi makefile đệ quy
Dùng export để gọi makefile đệ quy

Kết quả như sau:

Thực thi makefile
Thực thi makefile

Điều kiện trong Makefiles

Mệnh đề điều kiện if-else dường như đã quen thuộc với mọi người, trong makefile thì logic của hàm này cũng không có gì thay đổi. Chỉ có cú pháp sẽ khác một chút so với mệnh đề if-else ở ngôn ngữ khác. Bạn có thể xem qua ví dụ sau:

Cú pháp mệnh đề if else trong makefile
Cú pháp mệnh đề if else trong makefile

Kết quả trả về như sau:

Thực thi makefile có if-else
Thực thi makefile có if-else

Hàm cơ bản

Mục đích chính của các hàm là xử lý văn bản nhưng bạn vẫn có thể tạo các hàm riêng của mình bằng việc dùng lệnh gọi hàm tích hợp. Ví dụ:

Hàm cơ bản
Hàm cơ bản

Kết quả trả về:

Thực thi makefile
Thực thi makefile

Thay thế chuỗi

Hàm này tìm các từ được phân tách bằng khoảng trống trùng khớp với mẫu (pattern), thay thế chúng bằng từ được chỉ định. Ví dụ:

Thực hiện thay thế chuỗi
Thực hiện thay thế chuỗi

Kết quả như sau:

Tiến hành thực thi makefile
Tiến hành thực thi makefile

Hàm Foreach

Chức năng của hàm là chuyển đổi một danh sách các từ thành một danh sách khác. Cú pháp sẽ như sau:

$(foreach var, <list>, <text>)

Ví dụ:

Sử dụng hàm foreach
Sử dụng hàm foreach

Kết quả trả về như sau:

Thực thi makefile
Thực thi makefile

Hàm If

Hàm If sẽ kiểm tra đối số đầu tiên có rỗng hay không. Khi kết quả không rỗng, thì hàm sẽ chuyển sang kiểm tra đối số thứ hai, thứ ba,…Ví dụ:

Hàm if kiểm tra đối số
Hàm if kiểm tra đối số

Kết quả trả về:

Thực thi makefile
Thực thi makefile

Hàm call

Như đã đề cập ở trên, hàm call tích hợp được sử dụng để tạo các hàm tùy chỉnh (custom). Bạn sẽ tạo biến để định nghĩa hàm tùy chỉnh, các tham số phải sử dụng như $(0), $(1),… Cú pháp của hàm là:

$(call <variable>, <parameter>, <parameter>)

Ví dụ:

Sử dụng hàm call trong makefile
Sử dụng hàm call trong makefile

Kết quả như sau:

Kết quả thực thi make file
Kết quả thực thi make file

Hàm shell

Hàm này cho phép bạn chạy các lệnh trên Terminal nhưng sẽ thay thế việc xuống dòng mới bằng khoảng trắng. Bạn hãy xem ví dụ sau:

Sử dụng hàm shell
Sử dụng hàm shell

Khi bạn thực hiện makefile, kết quả trả về như sau:

Thực thị makefile
Thực thị makefile

Bên cạnh đó, makefile còn một số tính năng bổ sung sau:

Multiline

Dấu \ mang lại khả năng sử dụng nhiều dòng khi lệnh được viết quá dài, bạn sẽ nhìn thấy trọn vẹn câu lệnh khi hiển thị. Ví dụ:

Dùng \ để ngắt xuống dòng mới
Dùng \ để ngắt xuống dòng mới

.phony

.PHONY được sử dụng để khai báo mục tiêu (target) trong makefile, không đại diện cho một file thật trên filesystem, mà thay vào đó chỉ là một tên biểu tượng được sử dụng để chạy một tập hợp các lệnh. Ví dụ:

Sử dụng .phony feature
Sử dụng .phony feature

.delete_on_error

.DELETE_ON_ERROR yêu cầu make tự động xóa các file trung gian hoặc file kết quả (intermediate or target files) nếu có lỗi xảy ra trong quá trình xây dựng target. Lệnh này tránh để lại các file không hoàn chỉnh nếu quá trình xây dựng bị lỗi, giúp tránh tình trạng sử dụng lại các file hỏng trong lần xây dựng sau. Ví dụ:

Sử dụng .delete_on_error
Sử dụng .delete_on_error

Vietnix – Nhà cung cấp dịch vụ VPS linh hoạt và hiệu suất cao

Vietnix cung cấp dịch vụ VPS Việt Nam với hạ tầng hiện đại và khả năng tùy biến tối ưu, đáp ứng nhu cầu đa dạng từ cá nhân đến doanh nghiệp. Hệ thống đạt các tiêu chuẩn bảo mật quốc tế như ISO 27001:2022ISO 9001:2015, đảm bảo dữ liệu luôn được bảo vệ chặt chẽ. Khách hàng có toàn quyền quản trị máy chủ, dễ dàng thực hiện các thao tác như cài đặt hệ điều hành, theo dõi tài nguyên hay sao lưu dữ liệu từ giao diện quản lý trực quan. Đặc biệt, quy trình kích hoạt và nâng cấp hoàn toàn tự động giúp bạn nhanh chóng sử dụng dịch vụ chỉ sau vài thao tác đơn giản.

Thông tin liên hệ:

  • Hotline: 18001093
  • Email: sales@vietnix.com.vn
  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
  • Website: https://vietnix.vn/

Makefile là công cụ mạnh mẽ giúp tự động hóa quá trình biên dịch và quản lý dự án trên Linux. Hiểu rõ cách viết và sử dụng Makefile không chỉ giúp bạn tăng hiệu quả công việc mà còn đảm bảo tính nhất quán trong quá trình phát triển phần mềm.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Chọn chủ đề :

Hưng Nguyễn

Co-Founder
tại

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Tăng tốc độ website - Nâng tầm giá trị thương hiệu

Banner group
Tăng tốc tải trang

95 điểm

Nâng cao trải nghiệm người dùng

Tăng 8% tỷ lệ chuyển đổi

Thúc đẩy SEO, Google Ads hiệu quả

Tăng tốc ngay

SẢN PHẨM NỔI BẬT

MAXSPEED HOSTING

TĂNG TỐC WEBSITE TOÀN DIỆN

CÔNG NGHỆ ĐỘC QUYỀN

PHẦN CỨNG MẠNH MẼ

HỖ TRỢ 24/7

ĐĂNG KÝ NGAY
Khi mua Hosting/VPS
ĐĂNG KÝ NGAY
03/02/2025 - 15/02/2025
Pattern

7 NGÀY DÙNG THỬ HOSTING

NẮM BẮT CƠ HỘI, THÀNH CÔNG DẪN LỐI

Cùng trải nghiệm dịch vụ hosting tốc độ cao được hơn 100,000 khách hàng sử dụng

Icon
ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1
Icon
XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG