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 headerconfig.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 headerstdlib.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.