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でテキスト比較を実現するコツを教えます

序文コードを書く過程で、必然的にコードに何らかの変更を加えることになります。しかし、変更を加えるとき...

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

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

Vueは製品の拡大鏡効果を実現します

この記事の例では、製品の拡大鏡効果を実現するためのVueの具体的なコードを共有しています。具体的な内...

MySQL クロスデータベーストランザクション XA 操作の例

この記事では、例を使用して、MySQL のデータベース間トランザクション XA 操作について説明しま...

マークアップ言語 - リスト

標準化されたデザインソリューション - マークアップ言語とスタイルマニュアルWeb 標準ソリューショ...

Linuxシステムにおける重要なサブディレクトリの問題について話す

/etc/fstabパーティション/ディスクを自動的にマウントし、マウントするパーティション/デバイ...

SeataがMySQL 8バージョンを使用できない問題を解決する方法

考えられる理由: Seata が MySQL 8 をサポートしない主な理由は、接続ドライバーがバージ...

高速レイアウトのための CSS ビューポート単位

CSS ビューポート ユニットはここ数年登場しており、時が経つにつれて、ますます多くの開発者が使用し...

ElementuiはデータをxlsxとExcelテーブルにエクスポートします

最近、Vue プロジェクトについて知り、ElementUI でデータを xlsx および Excel...

mysql 5.6.21 のインストールと設定の詳細な手順

1. 概要MySQL バージョン: 5.6.21ダウンロードアドレス: https://dev.my...

MySQL をベースにしたシンプルな検索エンジンを実装する

目次MySQL ベースの検索エンジンの実装1. ngram全文パーサー2. 全文インデックスを作成す...

Vueはダイアログのカプセル化を実装します

目次Vue2 ライティングVue3プラグインのバージョンの記述Vue3 動的コンポーネントの記述書き...

VMwareでCentOSがインターネットにアクセスできない問題を素早く解決

昨日、VMware に CentOS7 をインストールしました。Tomcat パッケージを転送するた...

ウェブサイト上で flv/MP4 やその他のビデオ ファイルを再生できない問題は、MIME タイプに関連しています。

ウェブサイトを作成している際に、flv や MP4 形式などのビデオ ファイルはローカルでは正常に再...