Lệnh autoreconf trong Linux

Giới thiệu

Trong lab này, chúng ta sẽ khám phá mục đích và cách sử dụng lệnh autoreconf trong Linux. Lệnh autoreconf là một công cụ được sử dụng để tự động tạo ra các file hệ thống build cần thiết, chẳng hạn như các script configure và các file Makefile, cho các dự án phần mềm sử dụng hệ thống build GNU Autotools. Điều này bao gồm các công cụ như autoconf, automakelibtool, giúp tạo ra một quy trình build chuẩn hóa cho các dự án phần mềm, giúp việc biên dịch và cài đặt phần mềm trên các nền tảng khác nhau trở nên dễ dàng hơn. Chúng ta sẽ chuẩn bị môi trường phát triển và áp dụng lệnh autoreconf cho một dự án mẫu, trình bày cách sử dụng thực tế và lợi ích của nó.

Tìm hiểu Mục đích của Lệnh autoreconf

Trong bước này, chúng ta sẽ khám phá mục đích của lệnh autoreconf trong Linux. Lệnh autoreconf là một công cụ được sử dụng để tự động tạo ra các file hệ thống build cần thiết cho một dự án phần mềm, chẳng hạn như các script configure và các file Makefile.

Lệnh autoreconf thường được sử dụng trong các dự án sử dụng hệ thống build GNU Autotools, bao gồm các công cụ như autoconf, automakelibtool. Các công cụ này giúp tạo ra một quy trình build chuẩn hóa cho các dự án phần mềm, giúp việc biên dịch và cài đặt phần mềm trên các nền tảng khác nhau trở nên dễ dàng hơn.

Hãy bắt đầu bằng cách tạo một thư mục dự án mẫu:

mkdir -p ~/project/sample-project
cd ~/project/sample-project

Ví dụ đầu ra:

labex@ubuntu:~/project/sample-project$

Bây giờ, hãy tạo một file configure.ac đơn giản trong thư mục dự án:

nano configure.ac

Thêm nội dung sau vào file configure.ac:

AC_INIT([Sample Project], [1.0], [[email protected]])
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_OUTPUT

Lưu và đóng file.

File configure.ac là file đầu vào chính cho công cụ autoconf, công cụ này tạo ra script configure. Macro AM_INIT_AUTOMAKE khởi tạo công cụ automake, công cụ này tạo ra các file Makefile.

Bây giờ, hãy chạy lệnh autoreconf để tạo ra các file hệ thống build cần thiết:

autoreconf -i

Ví dụ đầu ra:

labex@ubuntu:~/project/sample-project$ autoreconf -i
libtoolize: Putting files in AC_CONFIG_MACRO_DIRS, 'M4'.
libtoolize: Consider adding 'AC_CONFIG_MACRO_DIRS([m4])' to configure.ac and
libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree.
configure.ac:1: installing './compile'
configure.ac:1: installing './config.guess'
configure.ac:1: installing './config.sub'
configure.ac:1: installing './install-sh'
configure.ac:1: installing './ltmain.sh'
configure.ac:1: installing './missing'

Lệnh autoreconf quét thư mục dự án, xác định các file hệ thống build cần thiết và tự động tạo chúng. Điều này giúp các nhà phát triển không phải tự tạo và duy trì các file này, vốn có thể là một quá trình tốn thời gian và dễ xảy ra lỗi.

Sau khi chạy autoreconf, bạn sẽ thấy các file sau trong thư mục dự án của mình:

$ ls -l
total 32
-rw-rw-r-- 1 labex labex  210 Apr 12 15:32 aclocal.m4
-rw-rw-r-- 1 labex labex  279 Apr 12 15:32 compile
-rw-rw-r-- 1 labex labex 1076 Apr 12 15:32 config.guess
-rw-rw-r-- 1 labex labex  554 Apr 12 15:32 config.sub
-rw-rw-r-- 1 labex labex 3328 Apr 12 15:32 configure
-rw-rw-r-- 1 labex labex 2925 Apr 12 15:32 configure.ac
-rw-rw-r-- 1 labex labex  700 Apr 12 15:32 install-sh
-rw-rw-r-- 1 labex labex 8632 Apr 12 15:32 ltmain.sh
-rw-rw-r-- 1 labex labex  554 Apr 12 15:32 missing

Đây là các file hệ thống build cần thiết mà lệnh autoreconf đã tạo dựa trên file configure.ac.

Chuẩn bị Môi trường Phát triển cho autoreconf

Trong bước này, chúng ta sẽ chuẩn bị môi trường phát triển để sử dụng lệnh autoreconf. Chúng ta sẽ cài đặt các công cụ build và các dependency cần thiết cho hệ thống build GNU Autotools.

Đầu tiên, hãy cập nhật danh sách các package và cài đặt các package cần thiết:

sudo apt-get update
sudo apt-get install -y autoconf automake libtool

Ví dụ đầu ra:

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]
...
Selecting previously unselected package autoconf.
Preparing to unpack .../autoconf_2.71-2_all.deb ...
Unpacking autoconf (2.71-2) ...
Selecting previously unselected package automake.
Preparing to unpack .../automake_1.16.5-1.3_all.deb ...
Unpacking automake (1.16.5-1.3) ...
Selecting previously unselected package libtool.
Preparing to unpack .../libtool_2.4.6-15.2ubuntu1_amd64.deb ...
Unpacking libtool (2.4.6-15.2ubuntu1) ...
Setting up autoconf (2.71-2) ...
Setting up automake (1.16.5-1.3) ...
Setting up libtool (2.4.6-15.2ubuntu1) ...
Processing triggers for man-db (2.10.2-1) ...

Các package autoconf, automakelibtool là các thành phần cốt lõi của hệ thống build GNU Autotools. Các công cụ này phối hợp với nhau để tạo ra các file hệ thống build cần thiết, chẳng hạn như các script configure và các file Makefile, cho một dự án phần mềm.

Bây giờ, hãy xác minh rằng các package đã được cài đặt đúng cách:

which autoconf
which automake
which libtool

Ví dụ đầu ra:

/usr/bin/autoconf
/usr/bin/automake
/usr/bin/libtool

Đầu ra cho thấy rằng các package cần thiết đã được cài đặt và có sẵn trong PATH của hệ thống.

Với môi trường phát triển đã được thiết lập, chúng ta đã sẵn sàng sử dụng lệnh autoreconf trong bước tiếp theo.

Áp dụng autoreconf cho một Dự án Mẫu

Trong bước này, chúng ta sẽ áp dụng lệnh autoreconf cho một dự án mẫu và quan sát các file hệ thống build được tạo ra.

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

mkdir -p ~/project/sample-project-2
cd ~/project/sample-project-2

Ví dụ đầu ra:

labex@ubuntu:~/project/sample-project-2$

Bây giờ, hãy tạo một file configure.ac đơn giản trong thư mục dự án:

nano configure.ac

Thêm nội dung sau vào file configure.ac:

AC_INIT([Sample Project 2], [1.0], [[email protected]])
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_OUTPUT

Lưu và đóng file.

Tiếp theo, hãy chạy lệnh autoreconf để tạo ra các file hệ thống build cần thiết:

autoreconf -i

Ví dụ đầu ra:

labex@ubuntu:~/project/sample-project-2$ autoreconf -i
libtoolize: Putting files in AC_CONFIG_MACRO_DIRS, 'M4'.
libtoolize: Consider adding 'AC_CONFIG_MACRO_DIRS([m4])' to configure.ac and
libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree.
configure.ac:1: installing './compile'
configure.ac:1: installing './config.guess'
configure.ac:1: installing './config.sub'
configure.ac:1: installing './install-sh'
configure.ac:1: installing './ltmain.sh'
configure.ac:1: installing './missing'

Sau khi chạy autoreconf, hãy xem xét các file được tạo:

ls -l

Ví dụ đầu ra:

total 32
-rw-rw-r-- 1 labex labex  210 Apr 12 15:41 aclocal.m4
-rw-rw-r-- 1 labex labex  279 Apr 12 15:41 compile
-rw-rw-r-- 1 labex labex 1076 Apr 12 15:41 config.guess
-rw-rw-r-- 1 labex labex  554 Apr 12 15:41 config.sub
-rw-rw-r-- 1 labex labex 3328 Apr 12 15:41 configure
-rw-rw-r-- 1 labex labex 2925 Apr 12 15:41 configure.ac
-rw-rw-r-- 1 labex labex  700 Apr 12 15:41 install-sh
-rw-rw-r-- 1 labex labex 8632 Apr 12 15:41 ltmain.sh
-rw-rw-r-- 1 labex labex  554 Apr 12 15:41 missing

Bạn có thể thấy rằng lệnh autoreconf đã tạo ra cùng một bộ file hệ thống build như trong bước trước, bao gồm script configure và các file hỗ trợ khác.

Các file được tạo này giờ đây có thể được sử dụng để biên dịch và cài đặt dự án phần mềm bằng quy trình build GNU Autotools tiêu chuẩn.

Tóm tắt

Trong lab này, chúng ta đã khám phá mục đích của lệnh autoreconf trong Linux, được sử dụng để tự động tạo ra các file hệ thống build cần thiết cho một dự án phần mềm, chẳng hạn như các script configure và các file Makefile. Chúng ta đã tạo một thư mục dự án mẫu, thiết lập một file configure.ac cơ bản, và sau đó chạy lệnh autoreconf để tạo ra các file hệ thống build cần thiết. Quá trình này rất cần thiết cho các dự án sử dụng hệ thống build GNU Autotools, vì nó giúp tạo ra một quy trình build chuẩn hóa có thể được sử dụng trên các nền tảng khác nhau.

400+ câu lệnh phổ biến trong Linux