Lệnh autoconf 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 autoconf trong Linux. autoconf là một công cụ được sử dụng để tạo các shell script có thể tự động cấu hình các gói mã nguồn phần mềm để thích ứng với nhiều loại hệ thống giống Unix. Chúng ta sẽ bắt đầu bằng cách cài đặt gói autoconf, sau đó tạo một chương trình C đơn giản và sử dụng autoconf để tạo các file cấu hình cần thiết. Cuối cùng, chúng ta sẽ tùy chỉnh các file cấu hình autoconf cho các dự án phức tạp hơn.

Tìm hiểu Mục đích và Cách sử dụng lệnh autoconf

Trong bước này, chúng ta sẽ khám phá mục đích và cách sử dụng lệnh autoconf trong Linux. autoconf là một công cụ được sử dụng để tạo các shell script có thể tự động cấu hình các gói mã nguồn phần mềm để thích ứng với nhiều loại hệ thống giống Unix.

Đầu tiên, hãy cài đặt gói autoconf:

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

Ví dụ về đầu ra:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  m4 perl
Suggested packages:
  autoconf-archive gnu-standards autoconf-doc
The following NEW packages will be installed:
  autoconf m4 perl
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,245 kB of archives.
After this operation, 5,138 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
...

Lệnh autoconf được sử dụng để tạo các script cấu hình (thường có tên là configure) từ các file template (thường có tên là configure.ac hoặc configure.in). Các script cấu hình này sau đó được sử dụng để cấu hình mã nguồn để biên dịch và cài đặt trên hệ thống đích.

Đây là một ví dụ đơn giản về cách sử dụng autoconf:

## Create a simple C program
cat > hello.c << EOF
#include <stdio.h>

int main() {
    printf("Hello, world!\n");
    return 0;
}
EOF

## Create the configure.ac file
cat > configure.ac << EOF
AC_INIT([hello], [1.0], [[email protected]])
AC_PROG_CC
AC_OUTPUT([Makefile])
EOF

## Generate the configure script
autoconf

Bây giờ, hãy chạy script configure đã tạo và build chương trình:

./configure
make

Ví dụ về đầu ra:

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
configure: creating ./config.status
config.status: creating Makefile
make  all-am
make[1]: Entering directory '/home/labex/project'
gcc -g -O2 -o hello hello.c
make[1]: Leaving directory '/home/labex/project'

Lệnh autoconf tạo ra script configure, sau đó được sử dụng để cấu hình mã nguồn để biên dịch và cài đặt. Script configure phát hiện các tính năng và khả năng của hệ thống và tạo ra một Makefile có thể được sử dụng để build phần mềm.

Cấu hình và Build một Chương trình C Đơn giản Sử dụng autoconf

Trong bước này, chúng ta sẽ sử dụng lệnh autoconf để cấu hình và build một chương trình C đơn giản.

Đầu tiên, hãy tạo một chương trình C đơn giản có tên là hello.c:

#include <stdio.h>

int main() {
    printf("Hello, world!\n");
    return 0;
}

Tiếp theo, chúng ta sẽ tạo file configure.ac, được sử dụng bởi autoconf để tạo script configure:

cat > configure.ac << EOF
AC_INIT([hello], [1.0], [[email protected]])
AC_PROG_CC
AC_OUTPUT([Makefile])
EOF

Bây giờ, hãy tạo script configure:

autoconf

Ví dụ về đầu ra:

configure.ac:1: installing './install-sh'
configure.ac:1: installing './missing'

Với script configure đã được tạo, bây giờ chúng ta có thể chạy nó để cấu hình dự án:

./configure

Ví dụ về đầu ra:

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
configure: creating ./config.status
config.status: creating Makefile

Cuối cùng, chúng ta có thể build chương trình bằng cách sử dụng make:

make

Ví dụ về đầu ra:

make  all-am
make[1]: Entering directory '/home/labex/project'
gcc -g -O2 -o hello hello.c
make[1]: Leaving directory '/home/labex/project'

File thực thi hello hiện đã được build và sẵn sàng để chạy.

Tùy chỉnh Các File Cấu hình autoconf cho Các Dự án Phức tạp

Trong bước này, chúng ta sẽ khám phá cách tùy chỉnh các file cấu hình autoconf cho các dự án phức tạp hơn.

Trong khi các bước trước bao gồm một chương trình C đơn giản, các dự án thực tế thường có các yêu cầu phức tạp hơn, chẳng hạn như hỗ trợ nhiều nền tảng, kiểm tra các phụ thuộc và tùy chỉnh quy trình build.

Hãy bắt đầu bằng cách tạo một cấu trúc dự án phức tạp hơn:

#include <stdio.h>
#include "myheader.h"

#ifndef MYHEADER_H
#define MYHEADER_H

#endif

Bây giờ, chúng ta sẽ tạo file configure.ac để xử lý dự án phức tạp hơn này:

cd myproject
cat > configure.ac << EOF
AC_INIT([myproject], [1.0], [[email protected]])
AC_CONFIG_SRCDIR([src/main.c])
AC_CONFIG_HEADERS([config.h])
AC_PROG_CC
AC_CHECK_HEADERS([stdlib.h])
AC_OUTPUT([Makefile src/Makefile])
EOF

Những thay đổi chính trong file configure.ac này là:

  • AC_CONFIG_SRCDIR([src/main.c]): Chỉ định vị trí của file mã nguồn chính.
  • AC_CONFIG_HEADERS([config.h]): Tạo file header config.h có thể được sử dụng bởi dự án.
  • AC_CHECK_HEADERS([stdlib.h]): Kiểm tra sự tồn tại của file header stdlib.h.
  • AC_OUTPUT([Makefile src/Makefile]): Tạo các Makefile cho dự án.

Bây giờ, hãy tạo script configure và build dự án:

autoconf
./configure
make

Ví dụ về đầu ra:

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for stdlib.h... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
make  all-recursive
make[1]: Entering directory '/home/labex/myproject'
Making all in src
make[2]: Entering directory '/home/labex/myproject/src'
gcc -DHAVE_CONFIG_H -I. -g -O2 -c main.c
gcc -g -O2 -o myproject main.o
make[2]: Leaving directory '/home/labex/myproject/src'
make[1]: Leaving directory '/home/labex/myproject'

Script configure đã tạo hiện xử lý cấu trúc dự án phức tạp hơn, bao gồm file header myheader.h và file header config.h được tạo bởi autoconf.

Tóm tắt

Trong lab này, trước tiên chúng ta đã tìm hiểu về mục đích và cách sử dụng lệnh autoconf trong Linux, một công cụ được sử dụng để tạo các shell script có thể tự động cấu hình các gói mã nguồn phần mềm để thích ứng với các hệ thống giống Unix khác nhau. Sau đó, chúng ta đã cấu hình và build một chương trình C đơn giản bằng cách sử dụng autoconf bằng cách tạo một file configure.ac và tạo script configure. Cuối cùng, chúng ta đã khám phá cách tùy chỉnh các file cấu hình autoconf cho các dự án phức tạp hơn.

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