2015-02-24 7 views
0

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

Он, безусловно, работает для исходных кодов, а также работает для 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 для компиляции кода fortran. Инструмент идентификации НЕ МОЖЕТ найти ключевое слово RCS в скомпилированном коде и ничего не возвращает!

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

gf.out: 

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

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

Edit:

Fortran Исходный код:

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

Как вы ввели идентификационную строку в код? Пожалуйста, покажите свой источник. –

+0

@tkoenig Я редактировал вопрос и добавил исходный код fortran – Masood

ответ

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 

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

+0

Спасибо за ваш ответ, могу ли я использовать его где-то в коде, который не печатается? Потому что вы знаете, это метаданные и нехорошо быть в выходе программы. Я использовал переменную в печати, чтобы не удалить ее компилятором – Masood