两个程序的autotools

时间:2010-01-15 04:45:53

标签: c compilation header-files autotools

我有一个程序main.c,在程序中使用header.h调用header.c。我知道如何在GCC中编译它,但现在我想使用autotools。我想知道应该在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

中写入什么

3 个答案:

答案 0 :(得分: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的更改并再次执行这些步骤,因此从现在开始,您应该能够运行{{ 1}}无需再次完成所有这些步骤。

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

答案 1 :(得分: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

答案 2 :(得分: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嗨”); }

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

然后在这种情况下应该在makefile.am和configure.ac

中写入什么