Gfortran не выводит инструмент для идентификации в скомпилированном файле

Я использую инструмент для идентификации, чтобы извлечь строки ключевых слов RCS как из исходного файла, так и скомпилированного файла.

Это, безусловно, работает для исходных кодов, а также для скомпилированного вывода C GCC, а также для скомпилированного вывода fortran G77.

$ gcc -o c.out test.c
$ ident test.c c.out 
test.c:
     $Id: 63159761756 $

c.out:
     $Id: 63159761756 $


$ g77 -o g77.out test.f
$ ident test.f g77.out 
test.f:
     $Id: 63159761756 $

g77.out:
     $Id: 63159761756 $

Проблема в том, что я использую компилятор gfortran для компиляции кода на фортране. Инструмент идентификации не может найти ключевое слово RCS в скомпилированном коде и ничего не возвращает!

$ gfortran -o gf.out test.f
$ ident test.f gf.out 
test.f:
     $Id: 63159761756 $

gf.out:

Итак, что не так с Gfortran? Есть ли какая-либо оптимизация, которая манипулирует переменными, или инструмент идентификатора больше не способен анализировать полученный результат gfortran?

Как я могу решить эту проблему, пожалуйста?

Редактировать:

Фортран Исходный код:

  PROGRAM HELLO
    CHARACTER*80 ID
    ID =
 *'@(#)$Id: 63159761756 $'
    PRINT '(A)', 'Hello,fortran 77'
    Print *, 'ID is ', ID
    STOP
  END

1 ответ

Используйте строковую константу, как в

  PROGRAM HELLO
  PRINT '(A)', 'Hello,fortran 77'
  Print *, 'ID is ',
 +'@(#)$Id: ident.f,v 1.2 2015/02/24 14:20:49 ig25 Exp ig25 $'
  STOP
  END

Вы должны будете убедиться, что используете это так или иначе, или это может быть удалено.

редактировать

Вы должны использовать его где-то таким образом, чтобы компилятор не мог видеть, что он на самом деле бесполезен. Единственный способ, который я могу видеть на данный момент, - это что-то вроде ужасного взлома, но в любом случае...

  PROGRAM HELLO
  logical, volatile :: print_it = .false.
  PRINT '(A)', 'Hello,fortran 77'
  if (print_it) then
  Print *, 'ID is ',
 +'@(#)$Id: ident.f,v 1.2 2015/02/24 14:20:49 ig25 Exp ig25 $'
  end if
  STOP
  END

Здесь вы говорите компилятору с объявлением volatile никогда не предполагать, что print_it может быть ложным. Работает, но приветствуются более элегантные предложения.

Другие вопросы по тегам