autoconfを使用してMakefileを生成し、プロジェクトをコンパイルする手順

autoconfを使用してMakefileを生成し、プロジェクトをコンパイルする手順

序文

Linux では、コンパイルとリンクには Makefile を使用する必要がありますが、適切な Makefile を書くのは簡単ではなく、標準の Makefile を書くのはさらに面倒です。 autoconf を使用して Makefile を生成すると、特に大規模なプロジェクトでは多くのトラブルを回避できます。

ここでは、プロジェクトを使用してその方法を説明します。一部の手順は必須ではありませんが、どの手順が必須でないかわからない場合は、一部の手順が省略されており、それに応じてコードも変更する必要があるため (パスの変更など)、手順を 1 つ 1 つ実行することをお勧めします。

ステップ

まずautoconfをインストールする

sudo apt-get install autoconf

新しいプロジェクトフォルダを作成します(例:joy)

mkdir joy

cd joy

プロジェクトのライブラリ ファイルとソース ファイルを保存するために、 lib と src という 2 つの新しいフォルダーを作成します。

mkdir lib

mkdir src

次の図に示すように:

lib フォルダに入り、haha.h などの新しいヘッダー ファイルを作成し、ランダムに関数を宣言します。

cd lib

gedit haha.h

//ははは.h
#include <stdio.h>
void printhaha();

src フォルダーに入り、haha.c などの新しい C ファイルを作成してヘッダー ファイルの関数を実装し、main_code.c などの新しい C ファイルを作成してメイン関数を記述します。

cd ../src

gedit haha.c

//ははは.c
#include "../lib/haha.h"
void printhaha()
{
  printf("はは\n");
}
//メインコード.c
#include "../lib/haha.h"
void main()
{
  printhaha();
}

Joyフォルダに戻ると、プロジェクトファイルが書き込まれています

cd ..

autoscan を実行して configure.scan を生成します

autoscan

configure.scanを編集する

gedit configure.scan

編集前のファイルは次のようになります

#元のファイルを編集する# -*- Autoconf -*-
# このファイルを autoconf で処理して configure スクリプトを生成します。
AC_PREREQ([2.69])
AC_INIT([フルパッケージ名], [バージョン], [バグレポートアドレス])
AC_CONFIG_SRCDIR([src/haha.c])
AC_CONFIG_HEADERS([config.h])
# プログラムをチェックします。
AC_PROG_CC
# ライブラリをチェックします。
# ヘッダーファイルをチェックします。
# typedef、構造体、およびコンパイラの特性をチェックします。
# ライブラリ関数をチェックします。
AC_出力

接頭辞ACはAutoConfを意味します
AC_PREREQについては心配しないでください
AC_INITに[パッケージ名] [バージョン] [バグ報告アドレス(あなたのメールアドレス)]を入力してください
AC_CONFIG_SRCDIR のソース ファイル パスの下に任意のファイル名を入力します。Autoconf は、ファイルが存在するかどうかをチェックして、パスが正しいかどうかを判断します。通常は、心配する必要はありません。
AC_CONFIG_HEADERS に次の文を挿入しても問題ありません。これは automake 段階で必須であり、そうでない場合はエラーが報告されます。
AM_INIT_AUTOMAKE
AMはAutoMakeの略です
最後のAC_OUTPUTがAC_OUTPUTに変更される(Makefile)
変更されたファイルは次のようになります。

#変更されたファイル# -*- Autoconf -*-
# このファイルを autoconf で処理して configure スクリプトを生成します。
AC_PREREQ([2.69])
AC_INIT(hhh, 1.0, [email protected])
AC_CONFIG_SRCDIR([src/haha.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE  
# プログラムをチェックします。
AC_PROG_CC
# ライブラリをチェックします。
# ヘッダーファイルをチェックします。
# typedef、構造体、およびコンパイラの特性をチェックします。
# ライブラリ関数をチェックします。
AC_OUTPUT(メイクファイル)

保存して、configure.scan の名前を configure.ac に変更します。

新しいMakefile.amを作成する

gedit Makefile.am

次のコードを入力してください

AUTOMAKE_OPTIONS=\ オートメイクオプション
  外国 \
  サブディレクトリオブジェクト
bin_PROGRAMS=テスト_prj 
test_prj_SOURCES=\
  lib/haha.h \
  src/haha.c \
  src/メインコード.c

AUTOMAKE_OPTIONS の後には、スペースで区切られた automake 実行オプションが続きます。
外部は必要なファイルのみが検出されることを意味します。
subdir-objects は、コンパイルされた .o ファイルをサブパスに (ソース ファイルと一緒に) 配置できることを意味します。このオプションを指定しないと、すべての .o ファイルはプロジェクトのルート ディレクトリに配置されます。
bin_PROGRAMS の後の名前は、生成された実行可能バイナリ ファイルの名前です。bin_PROGRAMS は複数存在できますが、各 bin_PROGRAMS には対応する xxx_SOURCES が必要です。
xxx_SOURCES は、ヘッダー ファイル、ソース ファイルなどを含む実行可能ファイル xxx の依存関係です。

aclocal を使用して aclocal.m4 ファイルを生成する

aclocal

autoconfでconfigureファイルを生成する

autoconf

自動ヘッダー付きのconfig.h.inを生成する

autoheader

automakeでMakefile.inを生成するには、--add-missingを追加してデフォルトのファイルを自動的に追加する必要があります。

automake --add-missing

これでソフト​​ウェアの準備が整い、パッケージ全体を github またはオープンソース フォーラムにアップロードできるようになります。

他のユーザーは、ソース コード パッケージをダウンロードした後、実行可能ファイルをどのようにコンパイルおよびリンクするのでしょうか?あるいは、実行可能ファイルをどのようにコンパイルしてリンクするのでしょうか?

以下はソースコードのインストールの一般的な手順であり、コンパイルとリンクの手順でもあります。

まずMakefileを生成する

./configure

そして

make

実行ファイルtest_prjが生成されたことがわかります。

実行すると、結果は次のようになります。

結果は正しいです。

srcディレクトリに入ると、さらに2つのファイルが見つかりました


これは、AUTOMAKE_OPTIONS のサブディレクトリ オブジェクトの役割です。この文がなければ、2 つの .o ファイルがルート ディレクトリに表示されます。残念ながらプロジェクトが大きく、同じ名前のファイルが存在する場合は、深刻な結果を招く可能性があるため、この文を追加することをお勧めします。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • C++ 一般的なテンプレートを使用した Makefile の詳細な説明
  • Makefile/cmake/node-gyp で異なるプラットフォームを区別する方法
  • PythonはLinuxを操作するためにparamikoを使用する
  • 2つのLinuxサーバー間でファイルとフォルダを転送する手順
  • Linux で削除できないファイル/フォルダの解決方法
  • Linux で現在の Python インタープリターの場所を見つける方法
  • Linux シェル配列と連想配列の使用例
  • Linuxターミナルでシェルスクリプトを実行して現在実行中のアプリのログを直接出力するAndroidの実装方法
  • pyqt を使用して Linux コマンド プログラムをリモートでバッチ実行する方法
  • Linux シェル環境での Zabbix API の使用

<<:  CocosCreator ユニバーサルフレームワークデザインネットワーク

>>:  MySql はデータを正常に挿入しますが、[Err] 1055 エラーが報告されます。解決策

推薦する

Linux suse11でルートパスワードを忘れた場合に変更する方法の簡単な分析

SUSE Linuxでルートパスワードを忘れた場合の解決方法SUSE (Linux オペレーティング...

Mysql8.0はソート問題を解決するためにウィンドウ関数を使用する

MySQL ウィンドウ関数の紹介MySQL は MySQL 8.0 以降、ウィンドウ関数をサポートし...

異なるブラウザ間で互換性のあるテキスト配置を実現する CSS

フォームのフロントエンド レイアウトでは、テキスト ボックスのプロンプト テキストを両端に揃える必要...

preタグを自動的に折り返すためのサンプルコード

pre 要素は、フォーマット済みのテキストを定義します。 pre 要素で囲まれたテキストでは、通常、...

MySQL 5.7.9 シャットダウン構文例の詳細な説明

mysql-5.7.9 では、ついにシャットダウン構文が提供されます。以前は、MySQL データベー...

Vue+EChartsは、中国の地図の描画と省の自動回転と強調表示を実現します。

目次成果を達成する完全なコード + 詳細なコメントまとめ成果を達成する完全なコード + 詳細なコメン...

W3C チュートリアル (8): W3C XML スキーマのアクティビティ

XML スキーマは、DTD に代わる XML ベースのものです。 XML スキーマは、DTD に代わ...

IE6 および IE7 で DIV コンテナの固定高さを使用するためのヒント

IE6 と IE7 では CSS の解釈に多くの違いがあります。今日はそのうちの 1 つである高さに...

Windows ベースの MySQL 8.0.12 のインストール

このチュートリアルは Windows システムにのみ適用されます。インストールしたがまだインストール...

MySQL 永続統計の詳細な説明

1. 永続的な統計情報の重要性:統計は、MySQL が実行プランを生成するためのガイドとして使用され...

CentOS6.5にpython3.7をインストールする詳細な手順

1. Python 3をダウンロードする https://www.python.org/ftp/py...

Linux ファイル/ディレクトリの権限と所有権の管理

1. ファイルの権限と所有権の概要1. アクセス権Read r: ファイルの内容を表示し、ディレクト...

Mysql ルートユーザーアカウントのパスワードをリセットする問題を解決する

問題の説明: mysqladmin.exe を使用してコマンドを実行すると、次のエラー メッセージが...