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 エラーが報告されます。解決策

推薦する

Win10 での MySQL 8.0 ログインでユーザー 'root'@'localhost' のアクセスが拒否される (パスワード使用: YES) 問題の解決方法

最近、MySQL を学び始めました。インストールはスムーズに進み、インターネット上の既成のチュートリ...

忘れられたMySQLパスワードとログインエラーの問題について簡単に説明します

MySQL ログイン パスワードを忘れた場合、解決方法は実はとても簡単です。MySQL メイン構成フ...

IE7 互換モードで IE8 を有効にするコード

最も人気のあるタグはIE8ですブラウザベンダーはバージョンアップデートのリリースに躍起になっている一...

ウェブページ作成の基本宣言文書型記述(DTD

CSS レイアウトを使用して WEB 標準に準拠した Web ページを作成することは、jb51.ne...

クロスドメイン js フロントエンドの 8 つの実装ソリューション

目次1. jsonp クロスドメイン2. document.domain + iframe クロスド...

CSS3 を使用して入力複数選択ボックスのスタイルをカスタマイズする例

原則: まず入力要素を非表示にし、次に CSS を使用してラベル要素のスタイルを設定します (他の要...

Centos8 で Docker を使用して Django プロジェクトをデプロイする詳細なチュートリアル

導入この記事では、django + uwsgi + nginx デプロイメントを使用して、Docke...

CSS レイアウト チュートリアル: 垂直方向の中央揃えを実現する方法

序文最近、フロントエンドの知識をまとめており、いくつかのインタビューにも参加しました。インタビュー中...

HTML と CSS を書くための 6 つの最も効果的な方法

この記事では、効率を向上させ、時間を節約することを願って、最も効果的な 6 つの方法を紹介します。 ...

Windows 10 1903 エラー 0xc0000135 の解決方法 [推奨]

Windows 10 1903 は、2019 年に Microsoft がリリースした Windo...

Vue ミックスインの使い方の詳しい説明

目次Vue ミックスインの使用ミックスインでのデータアクセスミックスイン/index.jsホーム.v...

Vue-Routerのインストールと使用方法の詳細な説明

目次インストールルーティングの基本構成Vue にルーターをインストールするルーターの設定Router...

JavaScript で 9 グリッドのモバイル パズル ゲームを実装

この記事では、Jiugonggeモバイルパズルゲームを実装するためのJavaScriptの具体的なコ...

ElementUIはカスケードセレクタを実装します

この記事の例では、カスケードセレクターを実装するためのelementUIの具体的なコードを参考までに...

MySQL分離の使用手順を読む

現在のトランザクションはどの履歴バージョンを読み取ることができますか?読み取りビューは、トランザクシ...