Используйте autotools с расширением .r для заголовка, не ratfor, а на C - PullRequest
0 голосов
/ 21 мая 2018

Я работаю с книгой Акселя Т. Шрайнера http://www.cs.rit.edu/~ats/books/ooc.pdf "Объектно-ориентированное программирование в ANSI-C".Используемые им make-файлы работают так же хорошо, как и компиляции.Таким образом, компилятор C и утилита make не имеют проблем с использованием файлов .r в качестве включаемых файлов.(.r обозначает представление для того, чтобы практиковать сокрытие информации.)

Теперь я перешел к точке, где я хочу закодировать это вручную.Я обычно использую автоинструменты без проблем.С .r файлами я сталкиваюсь с проблемой.Команда autreconf -iv возвращает следующие ошибки:

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, просто еще одинзаголовочный файл.

Я искал в Google, но нашел в основном руководство для autoheader, которое, насколько я вижу, не помогает.

Есть ли способ заставить autotools рассматривать файлы .r (или любой другой суффикс в этом отношении) как код C вместо источников ratfor?

1 Ответ

0 голосов
/ 22 мая 2018

Это правда, что суффикс .h для заголовочных файлов - это всего лишь соглашение, а не правило.Фактически, вся идея заголовочных файлов как выделенной категории исходных файлов является в основном условной, даже если это стандарт, который соблюдает сам стандарт.Тем не менее, это очень строгие соглашения.

Automake достигает многих из своих режимов автоматизации, полагаясь на именование файлов и организацию для соблюдения таких соглашений.В частности, он распознает типы исходных файлов по суффиксам имени файла.Насколько мне известно, его правила для этого не могут быть изменены.Использование стандартных соглашений об именах файлов является одной из издержек использования Autotools.

Но это правило можно немного изменить.В частности, обратите внимание, что единственная цель, которой служит перечисление заголовочных файлов в переменной *_SOURCES, состоит в том, чтобы обеспечить их упаковку в (исходные) дистрибутивы.Automake не использует это для каких-либо других целей и, в частности, не использует его для отслеживания зависимостей.Но есть альтернативный способ сообщить Automake о файлах, которые должны быть включены в дистрибутив: перечислите их в значении переменной EXTRA_DIST.Таким образом, удаление файлов .r из переменных *_SOURCES и помещение их вместо 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 опущен - не показательно)

...