🌱 Hướng Dẫn CMake Phần 2: Cấu Trúc Cơ Bản Của CMakeLists.txt

🌱 Hướng Dẫn CMake Phần 2: Cấu Trúc Cơ Bản Của CMakeLists.txt

    Chào mừng bạn đến với Phần 2 trong series hướng dẫn về CMake! Ở phần trước, chúng ta đã cùng tìm hiểu CMake là gì và cách cài đặt nó. Hôm nay, chúng ta sẽ đi sâu vào cấu trúc cơ bản của file CMakeLists.txt – "trái tim" của mọi dự án sử dụng CMake. Nếu bạn là người mới bắt đầu hoặc muốn nắm vững cách viết file CMakeLists.txt, bài viết này sẽ giải thích chi tiết từng bước, từ cú pháp cơ bản đến các lệnh quan trọng như project(), add_executable(), và add_library().

File CMakeLists.txt Là Gì?

    Như đã đề cập ở bài viết trước về CMake, bạn cần hiểu rằng CMakeLists.txt là file cấu hình chính mà CMake sử dụng để tạo ra các file build (như Makefile hoặc project file cho IDE). Mỗi thư mục trong dự án của bạn có thể chứa một file CMakeLists.txt, nhưng file ở thư mục gốc (root directory) là nơi bạn định nghĩa cấu trúc tổng thể của dự án.

    Nói đơn giản, file này giống như một file script chỉ dẫn CMake cách:

  • Xác định tên dự án.
  • Tạo các file thực thi (executable) hoặc thư viện (library).
  • Quản lý các tệp nguồn (source files) và các phụ thuộc (dependencies).
Cmakelists.txt file generate flow

    Hãy cùng tìm hiểu các thành phần cơ bản của nó!

Các Lệnh Cơ Bản Trong CMakeLists.txt

    Dưới đây là ba lệnh nền tảng mà bạn sẽ gặp trong hầu hết các file CMakeLists.txt:

1. Lệnh project()

    Lệnh project() dùng để khai báo tên dự án và một số thông tin cơ bản như ngôn ngữ lập trình được sử dụng. Đây thường là dòng đầu tiên trong file CMakeLists.txt.

Cú pháp:

project(ProjectName LANGUAGES CXX)
  • ProjectName: Tên dự án của bạn (có thể chứa khoảng trắng).
  • LANGUAGES: Ngôn ngữ lập trình (ví dụ: C, CXX cho C++, hoặc cả hai).

Ví dụ:

project(MyFirstProject LANGUAGES CXX)

    Lệnh này khai báo dự án có tên "MyFirstProject" và sử dụng C++.

2. Lệnh add_executable()

    Lệnh này tạo một file thực thi (executable) từ các tệp nguồn (source files).

Cú pháp:

add_executable(ExecutableFileName file1.cpp file2.cpp)
  • ExecutableFileName: Tên của file thực thi (ví dụ: myapp).
  • file1.cpp file2.cpp: Danh sách các file nguồn (có thể là một hoặc nhiều file).

Ví dụ:

add_executable(myapp main.cpp)

    Lệnh trên sẽ tạo một file thực thi tên myapp từ file main.cpp.

3. Lệnh add_library()

    Nếu bạn muốn tạo một thư viện (library) thay vì file thực thi, hãy dùng add_library(). Thư viện có thể là static (.a), shared (.so/.dll), hoặc header-only.

Cú pháp:

add_library(LibraryName [STATIC | SHARED | INTERFACE] file1.cpp file2.cpp)
  • LibraryName: Tên của thư viện.
  • [STATIC | SHARED | INTERFACE]: Loại thư viện (mặc định là STATIC nếu không chỉ định).

Ví dụ:

add_library(mylib STATIC src/mylib.cpp)

    Lệnh này tạo một static library có tên mylib từ file mylib.cpp.

Biến Và Cú Pháp Cơ Bản Trong CMake

    CMake sử dụng biến để lưu trữ thông tin và làm cho file CMakeLists.txt linh hoạt hơn. Một số biến phổ biến:

  • CMAKE_CXX_COMPILER: Trình biên dịch C++ đang dùng (ví dụ: g++).
  • CMAKE_SOURCE_DIR: Thư mục gốc của dự án.
  • CMAKE_BINARY_DIR: Thư mục chứa file build.

    Bạn có thể tự định nghĩa biến bằng lệnh set():

set(MY_SOURCES main.cpp utils.cpp) add_executable(myapp ${MY_SOURCES})
  • ${MY_SOURCES}: Tham chiếu đến giá trị của biến MY_SOURCES

Một Số Cú Pháp Cơ Bản

  • Bình luận: Dùng # để comment.

    # This is a CMake comment
  • Chuỗi ký tự: Đặt trong dấu nháy kép nếu cần.

    set(PROJECT_NAME "My Project")
  • Danh sách: Các giá trị cách nhau bằng dấu cách hoặc dấu chấm phẩy.

    set(FILES file1.cpp;file2.cpp)

Ví Dụ Đầy Đủ Một File CMakeLists.txt

    Dưới đây là một file CMakeLists.txt đơn giản kết hợp các yếu tố trên:

# Minimum version of CMake cmake_minimum_required(VERSION 3.10) # Define project name and languages project(MyFirstProject LANGUAGES CXX) # Create list of Source Files set(SOURCES main.cpp utils.cpp) # Create executable file add_executable(myapp ${SOURCES})

Cách Chạy

  1. Tạo thư mục buildmkdir build && cd build
  2. Chạy CMake: cmake ...
  3. Build project: cmake --build ..

    ➤ Kết quả: Bạn sẽ có file thực thi myapp trong thư mục build.

Kết Luận

    Phần 2 này, chúng ta đã làm quen với cấu trúc cơ bản của file CMakeLists.txt, các lệnh quan trọng như project(), add_executable(), add_library(), và cách sử dụng biến. Đây là nền tảng để bạn tiếp tục khám phá các tính năng nâng cao hơn của CMake trong những phần sau. Bạn đã sẵn sàng để viết file CMakeLists.txt đầu tiên chưa? Hãy thử ngay và để lại câu hỏi nếu bạn cần hỗ trợ!

    Đừng quên theo dõi series này! Phần tiếp theo sẽ nói về cách quản lý dependencies trong CMake. Hãy để lại bình luận nếu bạn muốn mình giải thích thêm bất kỳ phần nào nhé!

>>>>>> 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
//