🌱 CMake Là Gì? Hướng Dẫn Cơ Bản Cho Người Mới Bắt Đầu Về CMake

🌱 CMake Là Gì? Hướng Dẫn Cơ Bản Cho Người Mới Bắt Đầu Về CMake

    Bạn đang bắt đầu hành trình lập trình và gặp khó khăn trong việc quản lý dự án với hàng loạt file mã nguồn? Đừng lo, CMake chính là công cụ giúp bạn đơn giản hóa quá trình này! Trong bài viết này, chúng ta sẽ cùng tìm hiểu CMake là gì, tại sao nó được các lập trình viên yêu thích, và cách sử dụng CMake một cách hiệu quả dành cho người mới bắt đầu!

    Trước đó, chúng ta đã cùng nhau tìm hiểu về khái niệm Makefile:

    ➤ Series hướng dẫn về Makefile

cmake in build system

CMake và lợi ích của Cmake?

    CMake là một công cụ build system generator mã nguồn mở, được thiết kế để quản lý quá trình biên dịch phần mềm một cách đơn giản và đa nền tảng. Không giống như Makefile – nơi bạn phải viết trực tiếp các lệnh/quy tắc compile bằng tay, thì CMake hoạt động ở mức cao hơn: nơi bạn mô tả dự án của mình (file nguồn, thư viện, cấu hình) trong một file CMakeLists.txt, rồi CMake sẽ tự động tạo ra Makefile (hoặc các file cấu hình khác) phù hợp với hệ điều hành và công cụ biên dịch bạn dùng.

    Nói đơn giản, với Makefile Bạn tự tay viết chi tiết lệnh để biên dịch (gcc, ld, v.v.). Còn với CMake, bạn chỉ cần nói "tôi có những file này, hãy biên dịch chúng", và CMake tự xử lý phần còn lại.

    Tại sao nên dùng CMake?

  1. Đa nền tảng: CMake hoạt động trên Windows, Linux, macOS và hỗ trợ nhiều công cụ như GCC, MSVC, hay ARM toolchain (rất phổ biến trong hệ thống nhúng). Dễ thấy các IDE không phải lúc nào cũng hỗ trợ đầy đủ platform, trong khi đó việc viết makefile tốn khá nhiều thời gian!
  2. Dễ bảo trì: Khi dự án lớn lên với rất nhiều file source và library, CMake giúp bạn quản lý dễ hơn so với việc chỉnh sửa Makefile phức tạp.
  3. Tự động hóa: CMake tự phát hiện thư viện, kiểm tra hệ thống, và tạo cấu hình phù hợp.
  4. Hỗ trợ hệ thống nhúng: Với vi điều khiển, bạn có thể chỉ định toolchain (như ARM GCC) để build firmware.

    Các Stages của Cmake

Các Stages của Cmake
Các Stages của Cmake

  1. Configure Stage: dịch tập lệnh CMake trong file CMakeLists.txt đã viết và cập nhật các biến bộ nhớ đệm trong file CMakeCache.txt
  2. Generation Stage: tạo các file cho project cho từng 'target' được định nghĩa trong file CMakeLists.txt.
  3. Build Stage: build project giống như build trên Visual Studio IDE, dựa trên các file cấu hình đã tạo. Build Stage với CMake là tùy chọn vì sau khi Generation Stage hoàn tất, có thể mở solution bằng IDE build nó từ đó.
  4. Install Stage: tạo các gói CMake từ code để có thể đưa nó vào một nơi khác bằng cách đóng gói trước rồi sử dụng hàm find_package(..). Tạo điều kiện thuận lợi cho việc đưa vào các dependencies của dự án bên ngoài và tạo các CMake script đơn giản hơn.
    Install Stage hoàn toàn tùy chọn và chúng ta có thể dừng lại ở Build Stage.

    So sánh với Makefile

Đặc điểmMakefileCMake
Cách viếtThủ công, chi tiết từng lệnhMô tả cấp cao, trừu tượng hơn
Đa nền tảngPhải chỉnh sửa cho từng hệ thốngTự động thích nghi
Dễ học ban đầuĐơn giản với dự án nhỏHơi phức tạp hơn nhưng đáng đầu tư
Quy mô dự ánKhó quản lý khi lớnTốt cho dự án lớn và phức tạp

Bắt đầu với một project sử dụng Cmake

    ① Cài đặt Cmake

    Trước khi bắt đầu với một project sử dụng Cmake, bạn sẽ cần cài đặt Cmake, các cài đặt rất đơn giản, bạn có thể truy cập trang chủ cmake.org để tải Cmake trên window hoặc dùng gói quản lý như apt install cmake trên Ubuntu.

Download Cmake on Windows
Download Cmake on Windows

Download Cmake on Windows
Download Cmake on Windows

    Việc cài đặt Cmake cũng rất dễ dàng khi chạy file .msi, chỉ cần bấm Next và Finish.

    ② Viết file CMakeLists.txt

    Tạo file CMakeLists.txt: Đây là "trái tim" của dự án, tương tự Makefile nhưng dễ viết hơn.

    Giả sử, viết cmake cho một chương trình C đơn giản dưới đây:

  1. // main.c
  2. #include <stdio.h>
  3. int main() {
  4. printf("Hello, CMake!\n");
  5. return 0;
  6. }

    Nếu viết makefile cho chương trình trên:

CC = gcc

hello: main.c
    $(CC) main.c -o $(TARGET)

clean:
    rm -f $(TARGET)

    Còn đây là file CmakeList.txt


cmake_minimum_required(VERSION 3.10)    # Minimum CMake version requirements
project(HelloProject C)                 # Name the project, language is C
add_executable(hello main.c)            # Create an executable file named "hello" from main.c

    ③ Chạy CMake

    Để chạy CMake, từ terminal, bạn gõ lệnh để tạo file build (ví dụ Makefile), rồi compile.

  1. Tạo thư mục build:
    mkdir build && cd build

  2. Chạy CMake để tạo Makefile:
    cmake ..

  3. Tiến hành compile bằng câu lệnh make:
    make

  4. Chạy chương trình sau khi file exe được build ra:
    ./hello

    Kết quả: Hello, CMake!

    Các bài viết và video sau mình sẽ cùng mọi người tìm hiểu sâu hơn về cách sử dụng Cmake với project vi điều khiển!

>>>>>> Follow ngay <<<<<<<

Để nhận được những bài học miễn phí mới nhất nhé 😊
Chúc các bạn học tập tốt 😊

Nguyễn Văn Nghĩa

Mình là một người thích học hỏi và chia sẻ các kiến thức về Nhúng IOT.

Đăng nhận xét

Mới hơn Cũ hơn
//