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

Lệnh cmake trong Linux là một công cụ mạnh mẽ để quản lý quá trình biên dịch phần mềm, giúp tạo ra các file Makefile từ các file cấu hình đơn giản. Nó cho phép bạn xây dựng dự án trên nhiều nền tảng khác nhau một cách dễ dàng, không phụ thuộc vào hệ điều hành. Sử dụng lệnh cmake giúp đơn giản hóa việc biên dịch và quản lý các dự án phần mềm phức tạp.

Lệnh cmake trong linux là gì?

CMake là một công cụ quản lý build hệ thống đa nền tảng, giúp đơn giản hóa quá trình biên dịch và liên kết các dự án phần mềm phức tạp. Nó không trực tiếp biên dịch mã nguồn, mà tạo ra các file build (ví dụ: Makefile) phù hợp với hệ thống và trình biên dịch bạn đang sử dụng. Command cmake in linux cho phép bạn cấu hình dự án của mình một cách độc lập với môi trường phát triển cụ thể. Với CMake, bạn có thể dễ dàng chuyển đổi dự án giữa các hệ điều hành và trình biên dịch khác nhau mà không cần sửa đổi mã nguồn. Nó giúp bạn tập trung vào việc phát triển phần mềm thay vì lo lắng về các chi tiết kỹ thuật của quá trình build.

Cài đặt CMake trên Ubuntu 22.04

Trong bước này, chúng ta sẽ cài đặt CMake, một công cụ build automation phổ biến, trên Ubuntu 22.04.

Đầu tiên, hãy cập nhật package index của hệ thống bằng lệnh sau:

sudo apt-get update

Ví dụ về kết quả trả về:

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB]
Get:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Fetched 324 kB in 1s (324 kB/s)
Reading package lists... Done

Tiếp theo, cài đặt các package cần thiết cho CMake bằng lệnh sau:

sudo apt update
sudo apt-get install -y cmake

Ví dụ về kết quả trả về:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  cmake-data libarchive13 libjsoncpp24 librhash0 libssl-dev libssl1.1
Suggested packages:
  cmake-doc
The following NEW packages will be installed:
  cmake cmake-data libarchive13 libjsoncpp24 librhash0 libssl-dev libssl1.1
0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 15.6 MB of archives.
After this operation, 67.6 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 libssl1.1 amd64 1.1.1m-3ubuntu1 [1,296 kB]
Get:2 http://archive.ubuntu.com/ubuntu jammy/main amd64 libssl-dev amd64 1.1.1m-3ubuntu1 [1,547 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy/main amd64 libarchive13 amd64 3.5.2-2 [262 kB]
Get:4 http://archive.ubuntu.com/ubuntu jammy/main amd64 libjsoncpp24 amd64 1.9.5-2 [104 kB]
Get:5 http://archive.ubuntu.com/ubuntu jammy/main amd64 librhash0 amd64 1.4.2-1 [106 kB]
Get:6 http://archive.ubuntu.com/ubuntu jammy/universe amd64 cmake-data all 3.22.1-1ubuntu1 [1,605 kB]
Get:7 http://archive.ubuntu.com/ubuntu jammy/universe amd64 cmake amd64 3.22.1-1ubuntu1 [10.7 MB]
Fetched 15.6 MB in 3s (5,204 kB/s)
Selecting previously unselected package libssl1.1:amd64.
(Reading database ... 78852 files and directories currently installed.)
Preparing to unpack .../libssl1.1_1.1.1m-3ubuntu1_amd64.deb ...
Unpacking libssl1.1:amd64 (1.1.1m-3ubuntu1) ...
Selecting previously unselected package libssl-dev:amd64.
Preparing to unpack .../libssl-dev_1.1.1m-3ubuntu1_amd64.deb ...
Unpacking libssl-dev:amd64 (1.1.1m-3ubuntu1) ...
Selecting previously unselected package libarchive13:amd64.
Preparing to unpack .../libarchive13_3.5.2-2_amd64.deb ...
Unpacking libarchive13:amd64 (3.5.2-2) ...
Selecting previously unselected package libjsoncpp24:amd64.
Preparing to unpack .../libjsoncpp24_1.9.5-2_amd64.deb ...
Unpacking libjsoncpp24:amd64 (1.9.5-2) ...
Selecting previously unselected package librhash0:amd64.
Preparing to unpack .../librhash0_1.4.2-1_amd64.deb ...
Unpacking librhash0:amd64 (1.4.2-1) ...
Selecting previously unselected package cmake-data.
Preparing to unpack .../cmake-data_3.22.1-1ubuntu1_all.deb ...
Unpacking cmake-data (3.22.1-1ubuntu1) ...
Selecting previously unselected package cmake.
Preparing to unpack .../cmake_3.22.1-1ubuntu1_amd64.deb ...
Unpacking cmake (3.22.1-1ubuntu1) ...
Setting up libssl1.1:amd64 (1.1.1m-3ubuntu1) ...
Setting up libssl-dev:amd64 (1.1.1m-3ubuntu1) ...
Setting up libarchive13:amd64 (3.5.2-2) ...
Setting up libjsoncpp24:amd64 (1.9.5-2) ...
Setting up librhash0:amd64 (1.4.2-1) ...
Setting up cmake-data (3.22.1-1ubuntu1) ...
Setting up cmake (3.22.1-1ubuntu1) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3) ...

Quá trình cài đặt đã hoàn tất. Bạn có thể kiểm tra phiên bản CMake bằng lệnh:

cmake --version

Ví dụ về kết quả trả về:

cmake version 3.22.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).

Tuyệt vời! Chúng ta đã cài đặt thành công CMake trên môi trường Ubuntu 22.04.

Tạo một Dự án C++ Đơn giản với CMake

Trong bước này, chúng ta sẽ tạo một dự án C++ đơn giản và sử dụng CMake để build nó.

Đầu tiên, hãy tạo một thư mục mới cho dự án của chúng ta:

cd ~/project
mkdir cpp-project && cd cpp-project

Tiếp theo, tạo một file C++ mới tên là main.cpp với nội dung sau:

#include <iostream>

int main() {
    std::cout << "Hello, CMake!" << std::endl;
    return 0;
}

Bây giờ, chúng ta cần tạo một file CMakeLists.txt trong cùng thư mục để định nghĩa quy trình build dự án. Thêm nội dung sau vào file:

cmake_minimum_required(VERSION 3.22)
project(cpp-project)

add_executable(cpp-project main.cpp)

File CMake này thiết lập phiên bản CMake tối thiểu cần thiết, định nghĩa tên dự án và thêm một target executable tên là cpp-project sẽ được build từ file main.cpp.

Để build dự án, chạy các lệnh sau:

cmake -S . -B build
cmake --build build

Lệnh đầu tiên tạo ra các file build trong thư mục build, và lệnh thứ hai thực sự build dự án.

Ví dụ về output:

-- The C compiler identification is GNU 11.2.0
-- The CXX compiler identification is GNU 11.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/labex/project/cpp-project/build
Scanning dependencies of target cpp-project
[ 50%] Building CXX object CMakeFiles/cpp-project.dir/main.cpp.o
[100%] Linking CXX executable cpp-project
[100%] Built target cpp-project

Cuối cùng, chạy file executable đã build:

./build/cpp-project

Ví dụ về output:

Hello, CMake!

Chúc mừng! Bạn đã tạo thành công một dự án C++ đơn giản và build nó bằng CMake.

Tìm hiểu về các cấu hình Build trong CMake

Trong bước này, chúng ta sẽ khám phá các cấu hình build khác nhau có sẵn trong CMake và cách sử dụng chúng.

CMake hỗ trợ một số cấu hình build, ví dụ như Debug, Release, RelWithDebInfoMinSizeRel. Các cấu hình này xác định các cài đặt tối ưu hóa và gỡ lỗi được sử dụng trong quá trình build.

Hãy bắt đầu bằng cách tạo một dự án C++ mới:

cd ~/project
mkdir cmake-configurations && cd cmake-configurations

Bây giờ, hãy tạo một file main.cpp với nội dung sau:

#include <iostream>

int main() {
    std::cout << "Build Configuration: " << CMAKE_BUILD_TYPE << std::endl;
    return 0;
}

Tiếp theo, tạo một file CMakeLists.txt với nội dung sau:

cmake_minimum_required(VERSION 3.22)
project(cmake-configurations)

add_executable(cmake-configurations main.cpp)

Để build dự án với cấu hình Debug mặc định, hãy chạy các lệnh sau:

cmake -S . -B build
cmake --build build

Ví dụ về đầu ra:

-- The C compiler identification is GNU 11.2.0
-- The CXX compiler identification is GNU 11.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/labex/project/cmake-configurations/build
Scanning dependencies of target cmake-configurations
[ 50%] Building CXX object CMakeFiles/cmake-configurations.dir/main.cpp.o
[100%] Linking CXX executable cmake-configurations
[100%] Built target cmake-configurations

Chạy file thực thi đã build:

./build/cmake-configurations

Ví dụ về đầu ra:

Build Configuration: Debug

Bây giờ, hãy build dự án với cấu hình Release:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

Ví dụ về đầu ra:

-- The C compiler identification is GNU 11.2.0
-- The CXX compiler identification is GNU 11.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/labex/project/cmake-configurations/build
Scanning dependencies of target cmake-configurations
[ 50%] Building CXX object CMakeFiles/cmake-configurations.dir/main.cpp.o
[100%] Linking CXX executable cmake-configurations
[100%] Built target cmake-configurations

Chạy file thực thi đã build:

./build/cmake-configurations

Ví dụ về đầu ra:

Build Configuration: Release

Như bạn có thể thấy, cấu hình build được phản ánh trong đầu ra của file thực thi. Cấu hình Debug được sử dụng mặc định, nhưng bạn có thể chỉ định một cấu hình khác bằng tùy chọn -DCMAKE_BUILD_TYPE khi chạy lệnh cmake.

Kết luận cho linux cmake command

Vậy là chúng ta đã cùng nhau khám phá những điều cơ bản về CMake trong môi trường Linux rồi! Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về cách CMake hoạt động và cách nó giúp đơn giản hóa quá trình xây dựng dự án. Với linux cmake command, bạn có thể dễ dàng quản lý các thư viện, biên dịch mã nguồn và tạo ra các file thực thi một cách nhanh chóng. Đừng ngần ngại thử nghiệm với các tùy chọn khác nhau của CMake để tìm ra cấu hình phù hợp nhất cho dự án của bạn. Hãy nhớ rằng, việc thực hành thường xuyên sẽ giúp bạn trở nên thành thạo hơn trong việc sử dụng CMake. Chúc bạn thành công trên con đường chinh phục CMake và xây dựng những dự án tuyệt vời trên Linux!

Last Updated : 17/10/2025