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
, automake
và libtool
, 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
, automake
và libtool
. 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
, automake
và libtool
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.