GNU Autotools で「Hello, World」

260, 2019-11-30

目次

目標

$ cd hello
$ ./configure && make && make install

ディレクトリ構成

「hello」ディレクトリを作成。

$ mkdir hello
$ cd hello

「hello/src」ディレクトリを作成。

hello$ mkdir src
hello$ ls
src

「hello」のソースコードを「hello/src」に作成。

hello$ cd src
hello/src$ vim hello.c
#include <stdio.h>

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

確認。

hello$ tree
.
`-- src
    `-- hello.c

1 directory, 1 file

Makefile.am を準備

「hello」ディレクトリ直下に一つ。

# Makefile.am
SUBDIRS=src

「hello/src」ディレクトリ直下に一つ。

# src/Makefile.am
bin_PROGRAMS=hello
hello_SOURCES=hello.c
AM_CFLAGS=-std=c11 -Wall -g -O2

確認。

hello$ tree
.
|-- Makefile.am
`-- src
    |-- Makefile.am
    `-- hello.c

1 directory, 3 files

autoscan

「hello」ディレクトリ直下で autoscan を実行して configure.scan を作成。
autoscan コマンドがなければ下記を参考に autoconf をインスコ。
http://visibletrap.blogspot.jp/2011/08/solved-autoscan-not-found.html

hello$ autoscan
hello$ ls
Makefile.am  autoscan.log  configure.scan  src

確認。

hello$ tree
.
|-- Makefile.am
|-- autoscan.log
|-- configure.scan
`-- src
    |-- Makefile.am
    `-- hello.c

1 directory, 5 files

configure.scan の編集

autoscan で作成された configure.scan を編集する。

# configure.scan
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([src/hello.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile
                 src/Makefile])
AC_OUTPUT

AC_INIT を編集。

- AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
+ AC_INIT([hello], [1.0], [todo@todo.com])

AM_INIT_AUTOMAKE を追加する。

...
AC_INIT([hello], [1.0], [todo@todo.com])
AM_INIT_AUTOMAKE
...

configure.scan を configure.ac に改名。

hello$ mv configure.scan configure.ac

後はシェルスクリプトで。

「hello」ディレクトリ直下に tofinish.sh を書いて、

#! /bin/sh
# hello/tofinish.sh
set -x
aclocal
autoheader
touch NEWS README AUTHORS ChangeLog
automake -a -c
autoconf
hello$ chmod +x tofinish.sh

走らせる。

hello$ ./tofinish.sh 
+ aclocal
+ autoheader
+ touch NEWS README AUTHORS ChangeLog
+ automake -a -c
configure.ac:6: installing `./install-sh'
configure.ac:6: installing `./missing'
src/Makefile.am: installing `./depcomp'
Makefile.am: installing `./INSTALL'
Makefile.am: installing `./COPYING' using GNU General Public License v3 file
Makefile.am:     Consider adding the COPYING file to the version control system
Makefile.am:     for your code, to avoid questions about which license your project uses.
+ autoconf

実行前。


hello$ tree
.
|-- Makefile.am
|-- configure.ac
|-- src
|   |-- Makefile.am
|   `-- hello.c
`-- tofinish.sh

1 directory, 5 files

実行後。

hello$ tree
.
|-- AUTHORS
|-- COPYING
|-- ChangeLog
|-- INSTALL
|-- Makefile.am
|-- Makefile.in
|-- NEWS
|-- README
|-- aclocal.m4
|-- autom4te.cache
|   |-- output.0
|   |-- output.1
|   |-- requests
|   |-- traces.0
|   `-- traces.1
|-- config.h.in
|-- configure
|-- configure.ac
|-- depcomp
|-- install-sh
|-- missing
|-- src
|   |-- Makefile.am
|   |-- Makefile.in
|   `-- hello.c
`-- tofinish.sh

2 directories, 24 files

./configure && make

「hello」ディレクトリ直下で。

hello$ ./configure && make

「hello/src」に hello がビルドされた。

hello$ ./src/hello 
Hello, World!

他。

hello$ make install
hello$ make clean

便利ですね。

参照

投稿者名です。64字以内で入力してください。

必要な場合はEメールアドレスを入力してください(全体に公開されます)。

投稿する内容です。

スポンサーリンク

スポンサーリンク

スポンサーリンク

スポンサーリンク