Sơ bộ về automake và autoconf:
Automake xem xét trên mã nguồn, xác định chúng phụ thuộc lẫn nhau như thế nào? và phát sinh file Makefile để cho các file nguồn được biên dịch theo thứ tự đúng.
Autoconf cho phép cấu hình tự động cài đặt phần mềm, điều chỉnh một số lượng lớn sự khác biệt để tăng tính portability;
Dự án nhỏ nhất chỉ yêu cầu cung cấp 2 file
Makefile.am – là file mà automake sử dụng để xây dựng các yêu cầu cho một dự án cụ thể: cái gì cần thiết để build, khi được cài đặt thì chúng ở vị trí nào;
configure.in – là file mà autoconf sử dụng để xây dựng script configure
Cấu trúc thư mục
Thư mục cao nhất của dự án chứa các file: cấu hình như configure.in, Changelog, COPY(bản sao giấy phép dự án), và README;
Các file header, mã nguồn cho ứng dụng chính sẽ được đặt trong thư mục con, thông thường là src
Makefile.am
Cung cấp một file Makefile.am cho mỗi thư mục trong cây thư mục mã nguồn; File Makefile.am trong thư mục cao nhất rất đơn giản. Tạo thư mục project. Tạo một file text là Makefile.am và thêm một dòng như sau:
SUBDIR=src, biến SUBDIR được sử dụng để liệt kê danh mục các thư mục cần biên dịch;
Trong thư mục src, File Makefile.am có các dòng sau:
Makefile.am trong thư mục đầu
#Liệt kê danh mục các thư mục con cách nhau ký tự trắng
SUBDIRS = src
#Thông báo với automake rằng các file cũng cần #được phân phối nhưng không cần biên dịch
EXTRA_DIST=autogen.sh
Trong thư mục src, File Makefile.am có các dòng sau:
# Tên chương trình nhị phân là hello
bin_PROGRAMS = hello
# Các file nguồn cần biên dịch là
hello_SOURCES = hello.h hello.cc main.cc
#Thư mục con
SUBDIRS = foofiles
#Liên kết thư viện tạm thời với mã sử dụng nó
LDADD = foofiles/libfoo.a
Trong thư mục foofile, File Makefile.am có các dòng sau:
# Tên thư viện
noinst_LIBRARIES = libfoo.a
# File nguồn cần biên dịch
libfoo_a_SOURCES = foo.h foo.cc
#Vị trí của các file header
INCLUDE = -I@top_srcdir@/
File configure.ac
#Tên file là tham số, để kiểm tra file là có ở đó không?
AC_INIT(src/hello.cc)
#Tên chương trình và phiên bản
AM_INIT_AUTOMAKE(helloworld_cc,0.3)
#
AC_PROG_RANLIB
#sử dụng file config.h
AM_CONFIG_HEADER(config.h)
#Mã nguồn sử dụng C
AC_PROG_CC
#Mã nguồn sử dụng C++
AC_PROG_CXX
#phát sinh các thông số cần thiết cho Install, người sử dụng chỉ cần gõ make install
AC_PROG_INSTALL
#Các file Makefile cần được tạo ra
AC_OUTPUT(Makefile src/Makefile src/foofiles/Makefile)
Các bước tiến hành
$cd thư mục dự án
$aclocal
$autoheader
$autoconf
$touch AUTHORS NEWS README ChangeLog
$automake –add-missing
Tạo file autogen.sh
Tạo một file text là autogen.sh trong thư mục dự án, thay đổi mode để có thể thực thi được
Nội dung
#/bin/sh
aclocal \
&& automake –add-missing \
&& autoconf
Thực Hành Tạo 1 Project Đơn Giản Từ Automake và Autoconf
Tạo thư mục amhello, trong thư mục này tạo thư mục src.
Trong thư mục src tạo file main.c là mã nguồn của chương trình hello . Bỡi vì sau này có thể chúng ta sẽ tạo ra một số thư mục khác. Ví dụ: man chứa các tài liệu chương trình; data chứa các file dữ liệu; ...Có thể sử dụng gedit soạn thảo(Từ cửa sổ dòng lênh gõ gedit). File main.c có nội dung như sau (copy và paste)
Code:
#include <config.h>
#include <stdio.h>
int
main (void)
{
puts ("Hello World!");
puts ("This is " PACKAGE_STRING ".");
return 0;
}
# Tạo file README chứa thông tin sau:
This is a demonstration package for GNU Automake.
Type `info Automake' to read the Automake manual.
# Makefile.am và src/Makefile.am chứa các lệnh Automake.
gõ lệnh sau đó thêm
bin_PROGRAMS = hello
hello_SOURCES = main.c
gõ lệnh cat Makefile.am
SUBDIRS = src
dist_doc_DATA = README
# File configure.ac trong thư mục amhello chứa các lệnh Autoconf để tạo ra script configure. Nội dung như sau
AC_INIT([amhello], [1.0], [bug-automake@gnu.org])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
Makefile
src/Makefile
])
AC_OUTPUT
Khi đã có 5 file, ta chạy Autotools để khởi động hệ thống biên dịch. Bằng cách sử dụng lệnh autoreconf như sau(gõ dòng bôi đậm tại cửa sổ dòng lệnh với thư mục hiện hành là amhello):
gõ lệnh
Hệ thống biên dịch đã hoàn thành.
autoreconf đã tạo ra 4 file khác: configure , config.h.in , Makefile.in , và src/Makefile.in . 3 file mẫu phía sau sẽ được thay đổi cho phù hợp với hệ thống bỡi configure dưới các tên config.h , Makefile , và src/Makefile . Chạy script configure
gõ lệnh
Makefile , src/Makefile , và config.h đã được tạo ra. Thực hiện các lệnh sau
gõ lệnh
Chú ý rằng chỉ chạy autoreconf khi hệ thống biên dịch GNU (GNU Build System) không tồn tại. Khi sau đó bạn thay đổi một số lệnh trong Makefile.am hay configure.ac , những thành phần của hệ thống biên dịch sẽ tự động phát sinh khi bạn thực hiện lệnh make.
autoreconf là một script gọi autoconf , automake , và một nhóm các lệnh khác theo một trật tự nhất định. Cần ghi nhớ là autoconf chị trách nhiệm tạo ra file configure từ configure.ac , trong khi đó automake chịu trách nhiệm tạo ra các file Makefile.in từ các file Makefile.am và configure.ac .
trước khi gõ lệnh bạn sẽ có thư mục này: http://forums.congdongcviet.com/atta...9&d=1303294564
sau khi chạy lệnh:http://forums.congdongcviet.com/atta...8&d=1303294564
để tạo lib .so hoặc .a, xem tại đya: http://www.freesoftwaremagazine.com/...sing_autotools
