繁体   English   中英

如何自动制作C源文件

[英]How to automake C source files

我有一个文件cmdscan.c,其中仅包含一个函数和一个结构。 我的主程序hsh.c使用cmdscan.c中的函数和结构。 我完全按照教授pdf上的说明进行操作,但无法使用。 即使我编辑保存并运行的内容,也不会执行任何操作。 当我使用make distcheck时,出现错误,提示找不到hsh.c。

这是我的目录包含的内容:

Makefile.am:

    bin_PROGRAMS = hsh
    hsh_SOURCES = hsh.c cmdscan.c

configure.in:

    AC_INIT(hsh.c)
    AM_INIT_AUTOMAKE(hsh,1.0)
    AC_PROG_CC
    AC_PROG_INSTALL
    AC_OUTPUT(Makefile)

我确保使用标签。 然后运行命令:

aclocal
autoconf
touch README AUTHORS NEWS ChangeLog
automake -a
configure
make

注意:当我运行“配置”时,它说找不到命令。 但是我可以运行./configure,这就是我所做的。

当我执行最后一个命令“ make”时,我得到:

make: Nothing to be done for `all'.

即使我编辑并保存了一些内容。 所以当我跑步

make distcheck

我得到:

configure: error: cannot find sources (hsh.c) in ..
make: *** [distcheck] Error 1

如果我运行:

gcc cmdscan.c hsh.c -o hsh

有用。

您有一些错误,例如:

AC_INIT(hsh.c), AM_INIT_AUTOMAKE(hsh,1.0) instead use for example:
AC_INIT([hsh],[1.0])
AM_INIT_AUTOMAKE([1.14])

其中“ 1.14”是我的自动制作版本,您可以看到以下内容:automake --version

如果需要快速教程,请参见: http : //embelinux.blogspot.de/2013/09/autotools1-hola-mundo-la-autotools.html如果需要强大的文档,请运行:apt-get install autoconf(请参见/ usr /共享/ doc / autoconf-doc)并下载http://www.gnu.org/software/automake/manual/automake.pdf

AC_INIT (package, version, [bug-report], [tarname], [url])

处理任何命令行参数并执行初始化和验证。 设置软件包名称及其版本。 这些通常用于'--version'支持,包括configure的支持。 可选参数bug-report应该是用户应向其发送错误报告的电子邮件。 程序包的tarname与程序包不同:后者指定完整的程序包名称(例如,“ GNU Autoconf”),而前者用于分发tar球名称(例如,“ autoconf”)。 默认情况下,打包时将'GNU'剥离,小写,并且除字母数字和下划线以外的所有字符均更改为'-'。 如果提供,则url应该是软件包的主页。 AC_INIT的参数必须是静态的,即,不应有任何Shell运算,引号或换行符,但它们可以由M4计算。 这是因为程序包信息字符串在M4时扩展为多个上下文,并且无论在单引号字符串,双引号字符串,在此引用的文档还是在未引用的文档中使用,都必须在Shell时给出相同的文本。 允许使用m4_esyscmd或m4_esyscmd_s计算随版本控制系统的每次提交而变化的版本字符串(实际上,对于在两次发行之间进行的所有开发树构建,Autoconf都会这样做)。

AM_INIT_AUTOMAKE([OPTIONS])

运行生成的Makefile的正确操作所需的许多宏。 今天,使用单个参数调用AM_INIT_AUTOMAKE:以空格分隔的Automake选项列表,应将其应用于树中的每个Makefile.am。 效果就像每个选项都列在AUTOMAKE_OPTIONS中一样(请参见第17章[选项],第117页)。 也可以以另一种不建议使用的形式调用此宏:AM_INIT_ AUTOMAKE(PACKAGE,VERSION,[NO-DEFINE])。 在此格式中,有两个必需的参数:程序包和版本号。 因为可以从Autoconf的AC_INIT宏获取软件包和版本,所以这种用法通常已经过时了。 但是,与AC_INIT调用不同,此AM_INIT_AUTOMAKE调用在PACKAGE和VERSION参数中支持shell变量的扩展,这在某些选定的情况下仍然有用。 我们希望将来的Autoconf版本将改进它们对在配置运行时动态定义的软件包版本的支持。 当(如果发生)这种情况时,很可能会从Automake中删除对两个参数AM_INIT_AUTOMAKE调用的支持。

问题最终是我必须将configure.in更改为configure.ac。 然后,我必须在打开的文件语句0666添加另一个参数。 之后,一切似乎都很好,它可以编译并允许我创建一个包。 pdf没有提供此类信息-_-。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM