ホームページ バックエンド開発 PHPチュートリアル Linux で autoconf と automake を使用して Makefile を生成する原理の詳細な説明

Linux で autoconf と automake を使用して Makefile を生成する原理の詳細な説明

Nov 25, 2016 pm 03:43 PM
Automake linux makefile

Linux でプログラムを開発している人は、Makefile に遭遇したことがあるはずです。作成したプログラムをコンパイルするために make コマンドを使用すると、確かに非常に便利です。通常の状況では、誰もが簡単な Makefile を手動で作成しますが、フリー ソフトウェアの規約に準拠した Makefile を作成するのはそれほど簡単ではありません。この記事では、autoconf と automake という 2 つのツールを使用して、ファイルを自動的に生成する方法を紹介します。フリー ソフトウェアの規約に準拠した Makefile。「./configure」、「make」、および「make install」を使用して、一般的な GNU プログラムと同じようにプログラムを Linux システムにインストールできます。これは、オープン ソース ソフトウェアを開発したいプログラム開発者に特に適しています。また、小さな Toy プログラムを自分で作成する場合にも、この記事は非常に役立ちます。

1. Makefile の概要

Makefile は自動コンパイルとリンクに使用されます。各ファイルの変更によりプロジェクトが再リンクされますが、すべてのファイルを再コンパイルする必要はありません。 Makefile ファイル情報を使用して、make はリンク中にどのファイルを再コンパイルする必要があるかを判断します。

Makefile の目的は、ファイルをコンパイルするために他のどのファイルに依存する必要があるかをコンパイラーに知らせることです。これらの依存関係ファイルが変更されると、コンパイラーは、最終的に生成されたファイルが古いことを自動的に検出し、対応するモジュールを再コンパイルします。

Makefile の基本構造はそれほど複雑ではありませんが、プログラム開発者が Makefile を書き始めるとき、自分が書いた内容が規約に準拠しているかどうか疑問に思うことが多く、また、彼が作成した Makefile は自分の開発環境に関連付けられることがよくあります。環境変数またはパスの変更後、それに応じて Makefile を変更する必要がある場合があります。これにより、Makefile を手動で作成する際に多くの問題が発生しましたが、automake はこれらの問題をうまく解決するのに役立ちます。

automake を使用すると、プログラム開発者は、事前定義されたマクロを含むいくつかの単純なファイルを作成するだけで済みます。Autoconf は 1 つのマクロ ファイルに基づいて configure を生成し、automake は別のマクロ ファイルに基づいて Makefile.in を生成し、その後 Makefile.in に基づいて configure を使用します。規約に準拠したMakefile。ここではMakefileのautomake生成方法を詳しく紹介します。

2. 使用する環境

この記事で説明されているプログラムは、Linux ディストリビューション バージョン: Fedora Core リリース 1 に基づいており、使用する autoconf と automake が含まれています。

3. helloworld から始めます

最も一般的に使用されるサンプル プログラム helloworld から始めます。

簡単に言うと、次のプロセスです:

3 つの新しいファイルを作成します:

helloworld.c  configure.in  Makefile.am
ログイン後にコピー

次に、それらを順番に実行します:

autoscan; aclocal; autoconf; automake --add-missing; ./configure; make; ./helloworld;
ログイン後にコピー

Makefile が生成され、helloworld.c がコンパイルされて渡されることがわかります。非常に簡単に、いくつかのコマンドを実行するだけで、従来の Makefile を作成できます。それでは、詳細なプロセスを紹介しましょう:

1. ディレクトリを作成します

helloworld プログラムと関連ファイルを /home/my/build の下などに保存するために使用します。 2. helloworld.c

次に、お気に入りのエディターを使用して、コマンド vi helloworld.c などの hellowrold.c ファイルを作成します。 helloworld.c のコンテンツとして次のコードを使用します。

$ mkdir helloword
$ cd helloworld
ログイン後にコピー

完了したら保存して終了します。これで、helloworld ディレクトリに helloworld.c が作成されたはずです。

3.configure を生成する

autoscan コマンドを使用して、ディレクトリ内のソース コードに基づいて configure.in テンプレート ファイルを生成します。

コマンド:

int main(int argc, char** argv)
{
    printf("Hello, Linux World! ");
    return 0;
}
ログイン後にコピー

実行後、ファイルが hellowrold ディレクトリに生成されます:configure.scan は、configure.in の設計図として使用できます。

4、configure.in を生成します

次に、configure.scan の名前をconfigure.in に変更し、編集して次のように変更し、無関係なステートメントを削除します。

$ autoscan
$ ls
configure.scan helloworld.c
ログイン後にコピー

5 aclocal と autoconf を実行します

次に、コマンド aclocal と autoconf を実行します。 autoconf は、それぞれ aclocal.m4 と configure という 2 つのファイルを生成します:

Code
============================configure.in内容开始=========================================
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_INIT(helloworld.c)
AM_INIT_AUTOMAKE(helloworld, 1.0)
# 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_OUTPUT(Makefile)
============================configure.in内容结束=========================================
ログイン後にコピー

configure.in の内容は、autoconf によって処理された後、システムの特性、環境変数、およびソフトウェアのパラメータシェルスクリプト。

autoconf 是用来生成自动配置软件源代码脚本(configure)的工具。configure脚本能独立于autoconf运行,且在运行的过程中,不需要用户的干预。

要生成configure文件,你必须告诉autoconf如何找到你所用的宏。方式是使用aclocal程序来生成你的aclocal.m4。

aclocal根据configure.in文件的内容,自动生成aclocal.m4文件。aclocal是一个perl 脚本程序,它的定义是:“aclocal - create aclocal.m4 by scanning configure.ac”。

autoconf从configure.in这个列举编译软件时所需要各种参数的模板文件中创建configure。

autoconf需要GNU m4宏处理器来处理aclocal.m4,生成configure脚本。

m4是一个宏处理器。将输入拷贝到输出,同时将宏展开。宏可以是内嵌的,也可以是用户定义的。除了可以展开宏,m4还有一些内建的函数,用来引用文件,执行命令,整数运算,文本操作,循环等。m4既可以作为编译器的前端,也可以单独作为一个宏处理器.

6、新建Makefile.am

新建Makefile.am文件,命令:$ vi Makefile.am

内容如下:

AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=helloworld
helloworld_SOURCES=helloworld.c
ログイン後にコピー

automake会根据你写的Makefile.am来自动生成Makefile.in。Makefile.am中定义的宏和目标,会指导automake生成指定的代码。例如,宏bin_PROGRAMS将导致编译和连接的目标被生成。

7、运行automake

命令:

$ automake --add-missing
configure.in: installing `./install-sh'
configure.in: installing `./mkinstalldirs'
configure.in: installing `./missing'
Makefile.am: installing `./depcomp'
ログイン後にコピー

automake会根据Makefile.am文件产生一些文件,包含最重要的Makefile.in。

8、执行configure生成Makefile

$ ./configure
checking for a BSD-compatible install /usr/bin/install -c
checking whether build environment is sane yes
checking for gawk gawk
checking whether make sets $(MAKE) yes
checking for gcc gcc
checking for C compiler default output a.out
checking whether the C compiler works yes
checking whether we are cross compiling no
checking for suffix of executables
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 gcc option to accept ANSI C none needed
checking for style of include used by make GNU
checking dependency style of gcc gcc3
configure: creating ./config.status
config.status: creating Makefile
config.status: executing depfiles commands
$ ls -l Makefile
-rw-rw-r-- 1 yutao yutao 15035 Oct 15 10:40 Makefile
ログイン後にコピー

你可以看到,此时Makefile已经产生出来了。

9、使用Makefile编译代码

$ make
if gcc -DPACKAGE_NAME="" -DPACKAGE_TARNAME="" -DPACKAGE_VERSION="" -
DPACKAGE_STRING="" -DPACKAGE_BUGREPORT="" -DPACKAGE="helloworld" -DVERSION="1.0"
-I. -I. -g -O2 -MT helloworld.o -MD -MP -MF ".deps/helloworld.Tpo"
-c -o helloworld.o `test -f 'helloworld.c' || echo './'`helloworld.c;
then mv -f ".deps/helloworld.Tpo" ".deps/helloworld.Po";
else rm -f ".deps/helloworld.Tpo"; exit 1;
fi
gcc -g -O2 -o helloworld helloworld.o
ログイン後にコピー

10, 运行helloworld

$ ./helloworld
Hello, Linux World!
ログイン後にコピー

这样helloworld就编译出来了,你如果按上面的步骤来做的话,应该也会很容易地编译出正确的helloworld文件。你还可以试着使用一些其他的make命令,如make clean,make install,make dist,看看它们会给你什么样的效果。感觉如何?自己也能写出这么专业的Makefile,老板一定会对你刮目相看。

四、深入浅出

针对上面提到的各个命令,我们再做些详细的介绍。

1、 autoscan

autoscan是用来扫描源代码目录生成configure.scan文件的。autoscan可以用目录名做为参数,但如果你不使用参数的话,那么autoscan将认为使用的是当前目录。autoscan将扫描你所指定目录中的源文件,并创建configure.scan文件。

2、 configure.scan

configure.scan包含了系统配置的基本选项,里面都是一些宏定义。我们需要将它改名为configure.in

3、 aclocal

aclocal是一个perl 脚本程序。aclocal根据configure.in文件的内容,自动生成aclocal.m4文件。aclocal的定义是:“aclocal - create aclocal.m4 by scanning configure.ac”。

4、 autoconf

使用autoconf,根据configure.in和aclocal.m4来产生configure文件。configure是一个脚本,它能设置源程序来适应各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而可以使你的源代码能在不同的操作系统平台上被编译出来。

configure.in文件的内容是一些宏,这些宏经过autoconf 处理后会变成检查系统特性、环境变量、软件必须的参数的shell脚本。configure.in文件中的宏的顺序并没有规定,但是你必须在所有宏的最前面和最后面分别加上AC_INIT宏和AC_OUTPUT宏。

在configure.ini中:

#号表示注释,这个宏后面的内容将被忽略。

AC_INIT(FILE) 这个宏用来检查源代码所在的路径。

AM_INIT_AUTOMAKE(PACKAGE, VERSION) このマクロは必要です。生成するソフトウェア パッケージの名前とバージョン番号を記述します。PACKAGE はソフトウェア パッケージの名前、VERSION はバージョン番号です。 make dist コマンドを使用すると、helloworld-1.0.tar.gz のようなソフトウェア配布パッケージが生成されます。これには、対応するソフトウェア パッケージの名前とバージョン番号が含まれます。

AC_PROG_CC このマクロは、システムで使用されている C コンパイラをチェックします。

AC_OUTPUT(FILE) このマクロは、出力したい Makefile の名前です。

automake を使用する場合、実際には他のマクロを使用する必要がありますが、aclocal を使用してマクロを自動的に生成できます。 aclocal を実行すると、aclocal.m4 ファイルが取得されます。

configure.in および aclocal.m4 マクロ ファイルを生成した後、autoconf を使用して構成ファイルを生成できます。

5. Makefile.am

Makefile.am は Makefile.in を生成するために使用され、手動で記述する必要があります。 Makefile.am はいくつかのコンテンツを定義します:

AUTOMAKE_OPTIONS これは automake オプションです。 automake を実行すると、AUTHORS、ChangeLog、NEWS、その他のファイルなど、標準の GNU ソフトウェア パッケージに含める必要があるさまざまなファイルがディレクトリ内に存在するかどうかがチェックされます。外部に設定すると、automake は一般的なソフトウェア パッケージの標準を使用してチェックします。

bin_PROGRAMS 生成したい実行ファイルのファイル名を指定します。複数の実行可能ファイルを生成する場合は、名前をスペースで区切ります。

helloworld_SOURCES 「helloworld」を生成するために必要なソースコードを指定します。複数のソース ファイルを使用する場合は、スペースで区切ってください。たとえば、helloworld.h、helloworld.c が必要な場合は、helloworld_SOURCES= helloworld.h helloworld.c と記述してください。

bin_PROGRAMS で複数の実行可能ファイルを定義する場合は、各実行可能ファイルに対応する filename_SOURCES を定義する必要があります。

6. automake

automake を使用して、configure.in と Makefile.am に基づいて Makefile.in を生成します。

オプション --add-missing の定義は「不足している標準ファイルをパッケージに追加する」であり、これにより automake は標準ソフトウェア パッケージに必要ないくつかのファイルを追加します。

automake を使用して生成した Makefile.in ファイルは、GNU Makefile 規則に準拠しています。次に、configure シェル スクリプトを実行して、適切な Makefile ファイルを生成するだけです。

7. Makefile

GNU Makefiel 規則に準拠する Makefile には、いくつかの基本的な事前定義操作が含まれています:

make Makefile に従ってソース コードをコンパイルし、接続し、ターゲット ファイルと実行可能ファイルを生成します。

make clean 最後の make コマンドで生成されたオブジェクト ファイル (接尾辞 ".o" が付いたファイル) と実行可能ファイルをクリアします。

make install 正常にコンパイルされた実行可能ファイルをシステム ディレクトリ (通常は /usr/local/bin ディレクトリ) にインストールします。

make dist 配布パッケージファイル(つまり配布パッケージ)を生成します。このコマンドは、実行可能ファイルと関連ファイルを tar.gz 圧縮ファイルにパッケージ化し、ソフトウェアを公開するためのソフトウェア パッケージとして使用します。現在のディレクトリに「PACKAGE-VERSION.tar.gz」のような名前のファイルが生成されます。 PACKAGE と VERSION は、configure.in で定義した AM_INIT_AUTOMAKE(PACKAGE, VERSION) です。

make distcheck リリースソフトウェアパッケージを生成し、テストしてリリースパッケージの正当性を判断します。この操作により、圧縮されたパッケージ ファイルが自動的に解凍され、configure コマンドを実行してコンパイル エラーがないことを確認します。最後に、ソフトウェア パッケージの準備ができてリリースできることを確認するメッセージが表示されます。
make distclean は make clean に似ていますが、Makefile を含め、configure によって生成されたすべてのファイルも削除します。

5. プロセスの図

Linux で autoconf と automake を使用して Makefile を生成する原理の詳細な説明

6.

上記の導入により、GNU 規約に準拠した独自の Makefile と対応するプロジェクト ファイルを簡単に生成できるようになります。規則に準拠したより複雑な Makefile を作成する場合は、組み込みデータベース sqlite、単体テスト cppunit などのオープン コード プロジェクトの configure.in および Makefile.am ファイルを参照できます。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Deepseek Webバージョンの入り口Deepseek公式ウェブサイトの入り口 Deepseek Webバージョンの入り口Deepseek公式ウェブサイトの入り口 Feb 19, 2025 pm 04:54 PM

DeepSeekは、Webバージョンと公式Webサイトの2つのアクセス方法を提供する強力なインテリジェント検索および分析ツールです。 Webバージョンは便利で効率的であり、公式ウェブサイトは包括的な製品情報、ダウンロードリソース、サポートサービスを提供できます。個人であろうと企業ユーザーであろうと、DeepSeekを通じて大規模なデータを簡単に取得および分析して、仕事の効率を向上させ、意思決定を支援し、イノベーションを促進することができます。

DeepSeekをインストールする方法 DeepSeekをインストールする方法 Feb 19, 2025 pm 05:48 PM

DeepSeekをインストールするには、Dockerコンテナ(最も便利な場合は、互換性について心配する必要はありません)を使用して、事前コンパイルパッケージ(Windowsユーザー向け)を使用してソースからコンパイル(経験豊富な開発者向け)を含む多くの方法があります。公式文書は慎重に文書化され、不必要なトラブルを避けるために完全に準備します。

Bitget公式ウェブサイトのインストール(2025初心者ガイド) Bitget公式ウェブサイトのインストール(2025初心者ガイド) Feb 21, 2025 pm 08:42 PM

Bitgetは、スポット取引、契約取引、デリバティブなど、さまざまな取引サービスを提供する暗号通貨交換です。 2018年に設立されたこのExchangeは、シンガポールに本社を置き、安全で信頼性の高い取引プラットフォームをユーザーに提供することに取り組んでいます。 Bitgetは、BTC/USDT、ETH/USDT、XRP/USDTなど、さまざまな取引ペアを提供しています。さらに、この取引所はセキュリティと流動性について評判があり、プレミアム注文タイプ、レバレッジド取引、24時間年中無休のカスタマーサポートなど、さまざまな機能を提供します。

OUYI OKXインストールパッケージが直接含まれています OUYI OKXインストールパッケージが直接含まれています Feb 21, 2025 pm 08:00 PM

世界をリードするデジタル資産交換であるOuyi Okxは、安全で便利な取引体験を提供するために、公式のインストールパッケージを開始しました。 OUYIのOKXインストールパッケージは、ブラウザに直接インストールでき、ユーザー向けの安定した効率的な取引プラットフォームを作成できます。インストールプロセスは、簡単で理解しやすいです。

gate.ioインストールパッケージを無料で入手してください gate.ioインストールパッケージを無料で入手してください Feb 21, 2025 pm 08:21 PM

Gate.ioは、インストールパッケージをダウンロードしてデバイスにインストールすることで使用できる人気のある暗号通貨交換です。インストールパッケージを取得する手順は次のとおりです。Gate.ioの公式Webサイトにアクセスし、「ダウンロード」をクリックし、対応するオペレーティングシステム(Windows、Mac、またはLinux)を選択し、インストールパッケージをコンピューターにダウンロードします。スムーズなインストールを確保するために、インストール中に一時的にウイルス対策ソフトウェアまたはファイアウォールを一時的に無効にすることをお勧めします。完了後、ユーザーはGATE.IOアカウントを作成して使用を開始する必要があります。

OUYI Exchangeダウンロード公式ポータル OUYI Exchangeダウンロード公式ポータル Feb 21, 2025 pm 07:51 PM

OKXとしても知られるOUYIは、世界をリードする暗号通貨取引プラットフォームです。この記事では、OUYIの公式インストールパッケージのダウンロードポータルを提供します。これにより、ユーザーはさまざまなデバイスにOUYIクライアントをインストールすることが容易になります。このインストールパッケージは、Windows、Mac、Android、およびiOSシステムをサポートします。インストールが完了した後、ユーザーはOUYIアカウントに登録またはログインし、暗号通貨の取引を開始し、プラットフォームが提供するその他のサービスを楽しむことができます。

gate.io公式ウェブサイト登録インストールパッケージリンク gate.io公式ウェブサイト登録インストールパッケージリンク Feb 21, 2025 pm 08:15 PM

Gate.ioは、広範なトークン選択、低い取引手数料、ユーザーフレンドリーなインターフェイスで知られる高く評価されている暗号通貨取引プラットフォームです。高度なセキュリティ機能と優れたカスタマーサービスにより、Gate.ioは、信頼できる便利な暗号通貨取引環境をトレーダーに提供します。 gate.ioに参加する場合は、リンクをクリックして公式登録インストールパッケージをダウンロードして、暗号通貨取引の旅を開始してください。

ubuntuにnginxでphpmyadminをインストールする方法は? ubuntuにnginxでphpmyadminをインストールする方法は? Feb 07, 2025 am 11:12 AM

このチュートリアルは、既存のApacheサーバーに沿って、潜在的にubuntuシステムにnginxとphpmyAdminをインストールおよび構成することをガイドします。 Nginxのセットアップをカバーし、Apacheとの潜在的なポートの競合を解決し、Mariadbをインストールします(

See all articles