Trang tài liệu
Khóa học C++ nền tảng
Chương 17. Hệ thống xây dựng
Xây dựng hệ thống trong C++

Xây dựng hệ thống trong C++

Hệ thống xây dựng là một tập hợp các công cụ và tiện ích giúp tự động hóa quá trình biên dịch, liên kết và thực thi các tệp mã nguồn trong một dự án. Mục tiêu chính của hệ thống xây dựng là quản lý sự phức tạp của quá trình biên dịch và cuối cùng tạo ra một bản dựng (tệp thực thi hoặc tệp nhị phân). Trong C++ (cpp), một số hệ thống xây dựng phổ biến là:

  • GNU Make: Đây là một hệ thống xây dựng phổ biến sử dụng Makefile để xác định quy trình xây dựng. Nó kiểm tra các phần phụ thuộc và thời gian được ghi lại của các tệp nguồn để xác định tệp nào cần được biên dịch và liên kết.

    Ví dụ mã code:

    # Makefile
    CXX = g++
    CPPFLAGS = -Wall -std=c++11
    TARGET = HelloWorld
     
    all: $(TARGET)
     
    $(TARGET): main.cpp
        $(CXX) $(CPPFLAGS)main.cpp -o $(TARGET)
     
    clean:
        rm $(TARGET)
  • CMake: Đây là một hệ thống xây dựng đa nền tảng tập trung vào việc xác định các phụ thuộc của dự án và quản lý môi trường xây dựng. CMake tạo các tệp build (như Makefiles) cho các nền tảng khác nhau và cho phép nhà phát triển viết mã nguồn một lần, sau đó biên dịch nó cho các nền tảng đích khác nhau.

    Ví dụ mã code:

    # CMakeLists.txt
    cmake_minimum_required(VERSION 3.10)
    project(HelloWorld)
     
    set(CMAKE_CXX_STANDARD 11)
     
    add_executable(HelloWorld main.cpp)
  • Autotools: Còn được gọi là Hệ thống xây dựng GNU, bao gồm các công cụ GNU Autoconf, Automake và Libtool cho phép các nhà phát triển tạo phần mềm di động trên các hệ thống dựa trên Unix khác nhau. Đối với dự án C++, bạn sẽ cần tạo các tệp configure.ac, Makefile.am với các quy tắc cụ thể, sau đó chạy các lệnh sau trong thiết bị đầu cuối để xây dựng dự án:

    autoreconf --install
    ./configure
    make
    make install
  • SCons: Hệ thống xây dựng này sử dụng Python để xây dựng tập lệnh, làm cho nó cụ thể hơn GNU Make. Nó cũng có thể xây dựng đồng thời cho nhiều nền tảng và cấu hình.

    Ví dụ mã code:

    # SConstruct
    env = Environment()
    env.Program(target="HelloWorld", source=["main.cpp"])
  • Ninja: Một hệ thống xây dựng nhỏ và tập trung lấy danh sách các mục tiêu được chỉ định trong tệp văn bản mà con người có thể đọc được và xây dựng chúng nhanh nhất có thể.

    Ví dụ mã code:

    # build.ninja
    rule cc
      command = g++ -c $in -o $out
     
    rule link
      command = g++ $in -o $out
     
    build main.o: cc main.cpp
    build HelloWorld: link main.o
      default HelloWorld

Đây là một số hệ thống xây dựng phổ biến trong C++, mỗi hệ thống có cú pháp và khả năng riêng. Mặc dù Make được sử dụng rộng rãi nhưng CMake là một hệ thống xây dựng đa nền tảng tạo các tệp xây dựng cho các hệ thống xây dựng khác như Make hoặc Ninja. Autotools phù hợp để tạo phần mềm di động, SCons tận dụng Python cho các tập lệnh xây dựng của nó và Ninja tập trung vào thời gian xây dựng nhanh.