1

プログラム内のheader.hを使用してheader.cを呼び出すプログラムmain.cがあります。GCCでコンパイルする方法は知っていますが、autotoolsを使用したいと思います。main.cをコンパイルするためにMakefile.amに何を書くべきか知りたいですか?

たとえば、以下に示すように、main.cとheader.cの2つのcファイルがある場合

main.c:-

#include<stdio.h>
#include"header.h"
int main(int argc, char* argv[])
{

   printf("\n Hello");
  function1();

   return 0;
}

そして私のheader.cファイルには

#include<stdio.h>
void function1()
{
  printf("\n Hi");
}

だから私のheader.hファイルには

void function1();

この場合、makefile.amとconfigure.acに何を書き込む必要がありますか

4

3 に答える 3

4

これは、説明した状況に必要なものの最小限の例です。

ビルドするバイナリの名前と、ビルドに使用するソース ファイルを含むが必要ですmakefile.am(ヘッダー ファイルを一覧表示する必要はありません。ヘッダー ファイルは自動的に検出されます)。

bin_PROGRAMS = example
example_SOURCES = main.c header.c

そして、あなたが必要ですconfigure.ac。ここでは、プログラムの名前とバージョン番号を設定し、Automake をforeign引数で初期化して、GNU プロジェクトが必要とするファイルが見つからないことについて文句を言わないようにし、C コンパイラが必要であることを伝え、Makefile、最後に、以前の構成の結果を出力するように指示します。

AC_INIT([example], [1.0])
AM_INIT_AUTOMAKE([foreign])
AC_PROG_CC
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

既存のプログラムに何らかの種類のライブラリ依存関係がある場合は、実行して可能性のautoscanある依存関係を検出できます。configure.scan作成するために使用できるテンプレートを含むファイルを生成しますconfigure.ac。ただし、プログラムが単純な場合は、この手順をスキップして、上記の最小限の例を使用できます。

ここで実行autoreconf --installして、必要なファイルをいくつかコピーし、上記の構成ファイルからビルドMakefile.inします。configure次に、実行./configureしてスクリプトを構成し、Makefile. 最後に、実行makeしてプログラムをビルドします。

これらの手順を完了すると、Makefile生成した が変更を検出し、手順を再度実行します。そのため、今後は、これらすべての手順を再度実行する必要なくmakefile.am実行できるはずです。make

詳細については、AutomakeおよびAutoconfのマニュアルを参照してください。

于 2010-01-15T06:23:48.250 に答える
0

最小限の Makefile.am:

SHELL = /bin/sh

prefix = /usr/local
exec_prefix = @prefix@
bindir = ${exec_prefix}/bin

AM_CFLAGS = -I./

bin_PROGRAMS = your_program_name

niue_SOURCES = main.c


install-exec-local:
    cp ./your_program_name ${bindir}

uninstall-local:
    rm ${bindir}/your_program_name

configure.ac も必要になる場合があります。

# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
AC_INIT(your_program_name, 0.1, you@yourdomain.com)
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([main.c])
AC_CONFIG_HEADER([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for additional libraries.
# AC_CHECK_LIB([pthread], [pthread_create])

# Checks for additional header files.
# AC_CHECK_HEADERS([getopt.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_TYPE_SIZE_T
AC_HEADER_TIME
AC_C_VOLATILE

# Checks for library functions.
AC_HEADER_STDC
AC_FUNC_SELECT_ARGTYPES
#AC_CHECK_FUNCS([getopt_long])

AC_CONFIG_FILES([Makefile])
AC_OUTPUT
于 2010-01-15T05:42:32.857 に答える
0

たとえば、以下に示すように、main.c と header.c の 2 つの C ファイルがあるとします。

main.c:-

含む

インクルード「header.h」

int main(int argc, char* argv[]) {

printf("\nこんにちは"); function1();

0 を返します。}

私のheader.cファイルには

含む

void function1() { printf("\n こんにちは"); }

したがって、私の header.h ファイルには void function1(); が含まれます。

この場合、makefile.am と configure.ac に何を書くべきか

于 2010-01-15T10:05:10.133 に答える