将 autotools 与 file-extension .r 一起用于 header,不是 ratfor,而是 C 编程
Use autotools with file-extension .r for header, not ratfor but C programming
我正在研究 Axel T Schreiner 的 http://www.cs.rit.edu/~ats/books/ooc.pdf "Object-Oriented Programming in ANSI-C" 一书。他使用的 makefile 和编译一样工作正常。因此,C 编译器和 make 实用程序可以毫无问题地将 .r 文件用作包含文件。 (.r
代表表示,以练习信息隐藏。)
现在已经发展到要手写代码的地步了。我通常毫无问题地使用自动工具。用 .r
个文件我 运行 成问题了。命令autreconf -iv
returns出现以下错误:
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: ...............................
..... (snip)
autoreconf: running: /usr/bin/autoheader
autoreconf: running: automake --add-missing --copy --no-force
Makefile.am: error: Ratfor source seen but 'F77' is undefined
Makefile.am: The usual way to define 'F77' is to add 'AC_PROG_F77'
Makefile.am: to 'configure.ac' and run 'autoconf' again.
autoreconf: automake failed with exit status: 1
我希望 autoheader/autoreconf 不要将 .r
文件标记为 ratfor 源文件,而只是将它们用作 C 包含文件,只是另一个 header 文件。
我搜索了 google,但主要是找到了 autoheader 的手册,据我所知这没有帮助。
有没有办法让 autotools 将 .r 文件(或与此相关的任何其他后缀)视为 C 代码而不是 ratfor 源代码?
确实,头文件的.h
后缀只是约定,不是规定。事实上,将头文件作为源文件的一个特殊类别的整个想法基本上是约定俗成的,即使这是标准本身遵守的约定。然而,这些是非常强大的惯例。
Automake 通过依赖文件命名和组织来遵守此类约定来实现其许多自动化行为。特别是,它通过文件名后缀识别源文件类型。据我所知,其这样做的规则是不可配置的。使用标准文件命名约定是使用 Autotools 的代价之一。
但是可以稍微改变一下这个规则。请特别注意,在 *_SOURCES
变量中列出头文件的唯一目的是确保它们被打包到(源)发行版中。 Automake 不依赖于任何其他目的,特别是,它不依赖于依赖性跟踪。但是还有另一种方法可以告诉 Automake 应该进入分发的文件:将它们列在 EXTRA_DIST
变量的值中。因此,从 *_SOURCES
变量中删除 .r
文件并将它们放入 EXTRA_DIST
将解决问题。
例子:
test.c
#include "test.r"
int x = 1;
int main(void) {
return x;
}
test.r
#ifndef TEST_R
#define TEST_R
extern int x;
#endif
Makefile.am
bin_PROGRAMS = test
test_SOURCES = test.c
EXTRA_DIST = test.r
(configure.ac 省略 -- 不说明)
我正在研究 Axel T Schreiner 的 http://www.cs.rit.edu/~ats/books/ooc.pdf "Object-Oriented Programming in ANSI-C" 一书。他使用的 makefile 和编译一样工作正常。因此,C 编译器和 make 实用程序可以毫无问题地将 .r 文件用作包含文件。 (.r
代表表示,以练习信息隐藏。)
现在已经发展到要手写代码的地步了。我通常毫无问题地使用自动工具。用 .r
个文件我 运行 成问题了。命令autreconf -iv
returns出现以下错误:
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: ...............................
..... (snip)
autoreconf: running: /usr/bin/autoheader
autoreconf: running: automake --add-missing --copy --no-force
Makefile.am: error: Ratfor source seen but 'F77' is undefined
Makefile.am: The usual way to define 'F77' is to add 'AC_PROG_F77'
Makefile.am: to 'configure.ac' and run 'autoconf' again.
autoreconf: automake failed with exit status: 1
我希望 autoheader/autoreconf 不要将 .r
文件标记为 ratfor 源文件,而只是将它们用作 C 包含文件,只是另一个 header 文件。
我搜索了 google,但主要是找到了 autoheader 的手册,据我所知这没有帮助。
有没有办法让 autotools 将 .r 文件(或与此相关的任何其他后缀)视为 C 代码而不是 ratfor 源代码?
确实,头文件的.h
后缀只是约定,不是规定。事实上,将头文件作为源文件的一个特殊类别的整个想法基本上是约定俗成的,即使这是标准本身遵守的约定。然而,这些是非常强大的惯例。
Automake 通过依赖文件命名和组织来遵守此类约定来实现其许多自动化行为。特别是,它通过文件名后缀识别源文件类型。据我所知,其这样做的规则是不可配置的。使用标准文件命名约定是使用 Autotools 的代价之一。
但是可以稍微改变一下这个规则。请特别注意,在 *_SOURCES
变量中列出头文件的唯一目的是确保它们被打包到(源)发行版中。 Automake 不依赖于任何其他目的,特别是,它不依赖于依赖性跟踪。但是还有另一种方法可以告诉 Automake 应该进入分发的文件:将它们列在 EXTRA_DIST
变量的值中。因此,从 *_SOURCES
变量中删除 .r
文件并将它们放入 EXTRA_DIST
将解决问题。
例子:
test.c
#include "test.r"
int x = 1;
int main(void) {
return x;
}
test.r
#ifndef TEST_R
#define TEST_R
extern int x;
#endif
Makefile.am
bin_PROGRAMS = test
test_SOURCES = test.c
EXTRA_DIST = test.r
(configure.ac 省略 -- 不说明)