1

我有一个程序 main.c,它在程序中的 header.h 的帮助下调用 header.c。我知道如何在 GCC 中编译它,但现在我想使用自动工具。我想知道 Makefile.am 应该写什么来编译 main.c?

例如,如果我有两个 c 文件 main.c 和 header.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. 在这里您设置程序的名称和版本号,使用foreign参数初始化 Automake,这样它就不会向您抱怨缺少 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.inconfigure从上述配置文件中构建。然后,运行./configure以配置您的脚本,生成一个Makefile. 最后,运行make以构建您的程序。

完成这些步骤后Makefile,您生成的 将检测到您的更改makefile.am并再次运行这些步骤,因此从现在开始,您应该能够直接运行make而无需再次执行所有这些步骤。

有关详细信息,请参阅AutomakeAutoconf手册。

于 2010-01-15T06:23:48.250 回答
0

例如,如果我有两个 c 文件 main.c 和 header.c,如下所示

main.c:-

包括

包括“header.h”

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

printf("\n 你好"); 函数1();

返回0;}

我的 header.c 文件包含

包括

void function1() { printf("\n Hi"); }

所以我的 header.h 文件将包含 void function1();

那么在这种情况下应该在 makefile.am 和 configure.ac 中写入什么

于 2010-01-15T10:05:10.133 回答
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 回答