AutotoolsでconfigureやMakefileの作成

2022-01-10
centoslinuxred%20hatcplusplusgnu
    

目次

はじめに

C/C++で作成したプログラムをLinuxサーバにインストールするためのパッケージ化するために、 Autotoolsを利用して配布形式のパッケージを作成した際のメモです。

Autotools

makeは、C/C++のコンパイルやインストールにおいて依存関係を解決することができるツールです。 AutotoolsはMakefileそのものを自動的に生成するフレームワークです。

Linuxのソフトウェアのインストールでよく行う ./configure && make && make installconfigure を生成します。

環境

以下の環境で実施します。

  • CentOS 8.4

準備

ツール類のインストール

autoconf や automake をインストールします。

dnf -y group install 'Development Tools'

ソースコードの作成

test_appという名前でアプリケーションを作っていきます。

# ホームディレクトリの下にディレクトリを作成
mkdir -p ~/test_app/src
# Cファイルを作成
touch ~/test_app/src/test_app.c

正しく実行すると以下の様な状態になると思います。

~/test_app
└── src
    └── test_app.c

次に~/test_app/src/test_app.cを編集します。

#include <stdio.h>

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

一応、gccでコンパイルできるか確認しておきます。 「Hello world!」と表示されれば問題ないです。

cd ~/test_app/src
gcc test_app.c -o test_app
./test_app

configure.ac と Makefile.am

次に configure.ac と Makefile.am を作成します。

touch ~/test_app/configure.ac
touch ~/test_app/Makefile.am
touch ~/test_app/src/Makefile.am

実行後は以下の様になります。

~/test_app
├── configure.ac
├── Makefile.am
└── src
    ├── Makefile.am
    └── test_app.c

各ファイルを編集します。

~/test_app/configure.ac

# 第一引数はプロジェクト名、第二引数はバージョン
AC_INIT([test_app], [1.0])

# Makefileを作成する定義。
AM_INIT_AUTOMAKE
# foreignが無いとGNUプロジェクトとして作成される
# AM_INIT_AUTOMAKE([foreign]) 

# Cコンパイラを利用する定義
AC_PROG_CC

# 出力ファイルの定義
AC_OUTPUT([Makefile
                 src/Makefile])

~/test_app/Makefile.am

SUBDIRS = src

~/test_app/src/Makefile.am

bin_PROGRAMS = test_app

READMEなどのファイルを作成しておきます。

cd ~/test_app
touch NEWS README AUTHORS ChangeLog

configure Makeの生成

次のコマンドでconfigureやmakeに必要なファイルが生成されます。

autoreconf -vi
# viオプションの意味
# i, --initialization        also trace Autoconf's initialization process
# -v, --verbose             verbosely report processing

これを実行後、ディレクトリ構成は次の様になります。

test_app
├── aclocal.m4
├── AUTHORS
├── autom4te.cache
│   ├── output.0
│   ├── output.1
│   ├── requests
│   ├── traces.0
│   └── traces.1
├── ChangeLog
├── compile
├── configure
├── configure.ac
├── COPYING
├── depcomp
├── INSTALL
├── install-sh
├── Makefile.am
├── Makefile.in
├── missing
├── NEWS
├── README
└── src
    ├── Makefile.am
    ├── Makefile.in
    └── test_app.c

これでconfigureファイルが生成されます。

./configure
# デフォルトだと/usr/localにインストールされる。場所を変更するなら以下
# ./configure --prefix=/path/to/hoge

make
make install

その他 makeオプション

make clean

実行ファイルや中間生成物を削除

make distclean

Makefileなどのconfigureによって生成された生成物を削除

make dist

配布用のソースコード一式であるtarボールを作成する。

autoreconf について

autoreconfは以下の処理をまとめてやってくれる機能と理解。

  • autoscan
  • aclocal
  • automake
  • autoconf

Perlの場合

余談ですが、Perl系のパッケージはconfigureの代わりにMakefile.PLを利用してMakefileを生成します。

これは ExtUtils::MakeMaker で生成することができます。

リンク

    

関連記事

[Mac]ipコマンドの導入[iproute2mac]
iproute2macについて 導入 homebrewで導入 直接インストール 確認 サポートコマンド を導入して、macOSでipコマンドを導入した際のメモ iproute2macについて brona/iproute2mac: CLI wrapper for…

RPMパッケージ作成 Dockerを利用して
はじめに RPMパッケージ step1.環境構築からRPMパッケージングまで 事前準備 ワークスペースの作成 プログラム配置 specファイル rpmbuild インストール リンク はじめに Dockerを利用してRPM開発環境を用意し、実際にRPM…

RPMのspecファイルで利用するマクロ・変数
はじめに マクロ一覧 基本情報系 Body項目 コメント 参考文献 はじめに RPM(Fedora/CentOS系)を作成する際に利用するspecファイルで利用できるマクロについて調べた際のメモです。 マクロ一覧 基本情報系 パッケージの名前を定義します。これはspec…

CentOS8/RHEL8でのRPM管理における検討事項
初めに 前提 rpm rpm yum dnf コマンド リポジトリ リポジトリとライフサイクル AppStream Compatibility Level について AppStreamのサポート期間 Yum v3 -> Yum v4 リンク 初めに CentOS8/RHEL…

homebrewでnodejsインストール&任意のバージョン利用
初めに homebrewインストール nodejsの検索 インストール nodejsの利用 初めに homebrewでサクッとnodejsのインストールを行なった際のメモです。 環境はMacを対象としていますが、Linux…

tracerouteコマンドでネットワークの経路を洗い出す
tracerouteの用途 tracerouteの原理 IPヘッダのTTL コマンドを実行してみる 参考文献 tracerouteコマンドでネットワークの経路を洗い出した際の操作をメモしました。 環境はmacで実施しています。 また、traceroute…

AWS Amplify で コンテナベースのデプロイを行い REST API を構築
検証した環境 やってみる 初期準備 パイプラインを確認 終了処理 参考 AWS Amplify で コンテナベースのデプロイを行い REST API を構築した際のメモです。 検証した環境 amplify 5.1.…

Pythonでソケット通信を実装しメッセージの送受信を行う
ソース server.py client.py 動かしてみる 参考 Pythonでソケット通信を実現する方法です。 ソース server.py サーバ側のソースです。 client.py…

CentOS8 に Python + OpenCV をインストール
インストール テスト CentOS8 で標準で提供されているパッケージで Python + OpenCV 環境を構築する方法です。 検証した環境は CentOS8.3 (Docker) です。 インストール まず opencv…

[Perl] CentOS8 に plenv をインストール
インストール Step1 事前準備 Step2 PATHを通す (README通りにインストール) Step2 PATHを通す ($HOME以外にplenvをインストール) Step3 Perlインストール Step4 cpanmインストール CentOS…

最新の投稿

[Mac]ipコマンドの導入[iproute2mac]
iproute2macについて 導入 homebrewで導入 直接インストール 確認 サポートコマンド を導入して、macOSでipコマンドを導入した際のメモ iproute2macについて brona/iproute2mac: CLI wrapper for…

AutotoolsでconfigureやMakefileの作成
はじめに Autotools 環境 準備 ツール類のインストール ソースコードの作成 configure.ac と Makefile.am configure Makeの生成 その他 makeオプション autoreconf について Perlの場合 リンク はじめに C…

RPMパッケージ作成 Dockerを利用して
はじめに RPMパッケージ step1.環境構築からRPMパッケージングまで 事前準備 ワークスペースの作成 プログラム配置 specファイル rpmbuild インストール リンク はじめに Dockerを利用してRPM開発環境を用意し、実際にRPM…

RPMのspecファイルで利用するマクロ・変数
はじめに マクロ一覧 基本情報系 Body項目 コメント 参考文献 はじめに RPM(Fedora/CentOS系)を作成する際に利用するspecファイルで利用できるマクロについて調べた際のメモです。 マクロ一覧 基本情報系 パッケージの名前を定義します。これはspec…

CentOS8/RHEL8でのRPM管理における検討事項
初めに 前提 rpm rpm yum dnf コマンド リポジトリ リポジトリとライフサイクル AppStream Compatibility Level について AppStreamのサポート期間 Yum v3 -> Yum v4 リンク 初めに CentOS8/RHEL…

homebrewでnodejsインストール&任意のバージョン利用
初めに homebrewインストール nodejsの検索 インストール nodejsの利用 初めに homebrewでサクッとnodejsのインストールを行なった際のメモです。 環境はMacを対象としていますが、Linux…

tracerouteコマンドでネットワークの経路を洗い出す
tracerouteの用途 tracerouteの原理 IPヘッダのTTL コマンドを実行してみる 参考文献 tracerouteコマンドでネットワークの経路を洗い出した際の操作をメモしました。 環境はmacで実施しています。 また、traceroute…

[Vue]フロントエンド機能のみでダウンロードを実装する[JS]
実装 ポイント ソース デモ 参考サイト フロントエンドのみ(=サーバサイドがダウンロードさせない) でダウンロードを行う機能を実装した時のメモです。 Vueを利用して実装していますが、ここで記載しているコードはVueに依存した機能ではなく、ピュアなJSのAPI…

Node.js で作成した REST API を Docker化
Node.jsでREST APIを作成 コンテナ化 コンテナ化定義 コンテナ化作業 参考 Node.js で作成した REST API を Docker化した際のメモです。 Node.jsでREST APIを作成 まずはNode.js…

JavaScriptで優先度付きキューを実装する
優先度付きキューについて ソース 参考 JavaScriptで優先度付きキュー (プライオリティキュー) を実装する 優先度付きキューについて 具体的には次のような機能があります。 キューに対して要素を優先度付きで追加 (push…

Tags

Dates

s-yoshiki
s-yoshiki
githubtwitterqiita
ただの備忘録です。
JS/TS/node.js/PHP/AWS/OpenCV/CentOS
※このブログの内容は個人の見解であり、所属する組織等の見解ではありません。
© 2022   404 motivation not found