我有一个程序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
中写入什么答案 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.in
和configure
。然后,运行./configure
配置脚本,生成Makefile
。最后,运行make
来构建您的程序。
完成这些步骤后,您生成的Makefile
会检测到makefile.am
的更改并再次执行这些步骤,因此从现在开始,您应该能够运行{{ 1}}无需再次完成所有这些步骤。
答案 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中: -
int main(int argc,char * argv []) {
printf(“\ n你好”); 功能1();
返回0; }
我的header.c文件包含
void function1() { printf(“\ n嗨”); }
所以我的header.h文件将包含 void function1();
然后在这种情况下应该在makefile.am和configure.ac
中写入什么