2017-02-11 1 views
1

내 코드를 컴파일하는 데 gfortran의 버전을 확인하기 위해 autoconf를 사용하려고합니다. 이식성있는 방법으로 안전하게 버전 번호를 얻으려면 어떻게해야합니까?ghostran 버전 번호를 autoconf가있는 휴대용 방식으로 찾는 방법은 무엇입니까?

가장 쉬운 방법은 단순히 gfortran -dumpversion을 사용하는 것이지만,이 방법에 대한 몇 가지 문제점 (예 : 내 컴퓨터에서 패치 레벨 번호를 반환하지 않음)을 읽었습니다. 설명서에있는 -dumpfullversion 옵션이 구현되지 않은 것으로 보입니다 (치명적인 오류가 발생 함).

대신 gfortran --version 또는 gfortran -v을 사용하려고합니다. 내 첫 번째 시도는 다음과 같다 : $AWKAC_PROG_AWK에 의해 발견 된 AWK 형 프로그램을 포함

GFORTRAN_VERSION=`gfortran -v 2>&1 | $AWK 'END { print }' | $AWK '{ print $3 }'` 

. 그것은 내가 테스트 한 모든 리눅스 머신에서 완벽하게 작동합니다. 그러나 gfortran -v은 항상 출력의 마지막 줄의 세 번째 위치에 버전 번호를 반환한다고 가정하는 것이 합리적이지 않습니다. 예를 들어, MacOS 또는 Windows에서이 접근 방식을 사용할 수 있습니까?

모든 조언을 매우 환영받을 것입니다, 미리 감사드립니다!

답변

2

당신은

program p 
    implicit none 

    write(*,*) __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__ 
end program p 

당신이 좋아하는 경우에 당신은 서식을 사용자 정의 할 수

What are the gcc predefined macros for the compiler's version number?를 참조 다음과 같이 처리기 정의를 사용하는 간단한 프로그램을 작성할 수 있습니다.

+0

이것은 좋은 제안이지만 불행히도 저는 개발중인 패키지에 짧은 프로그램을 포함시킬 수 없습니다. 당신이 제안한 페이지에서 설명 된'gfortran -E -dM - remek

+2

'echo "__GNUC __.__ GNUC_MINOR __.__ GNUC_PATCHLEVEL__"| gfortran -E -cpp-2>/dev/null | 꼬리 - n 1 | sed -e 's/// g '' 출력 5.3.1 gfortran으로 5.3.1. Thats에는 몇 가지 기본 유닉스 도구 (tail and sed here)가 있고 어떤 종류의 파이핑이 지원된다는 것을 의미합니다. 휴대용 소프트웨어가 무엇인지, 소프트웨어의 종속성은 무엇인지 모릅니다. –

+1

우리는 또한 각 값을'ver = $ (echo "__GNUC__"| gfortran -E -P -)'등으로 얻을 수 있습니다 ... – roygvib

0

다른 플랫폼의 현재 구현이 gfortran에서 작동하지 않는다고 생각하는 이유를 모르겠습니다. This page은 "Fortran이 아닌"옵션 (예 : -v)에 대한 GCC 문서를 독자에게 알려줍니다. 이와 같은 문서를 사용하면 gcc과 매우 유사 할 것으로 기대합니다.

autoconf 테스트 (예 : AC_LANG 또는 AC_LANG_PUSH)를 설정하고 일반 autoconf 매크로 (예 : AC_COMPILE_IFELSE)를 사용할 수 있어야합니다. 그러나 출력을 위해 테스트 프로그램을 실행하는 것은 단점을 가지고 있습니다. 일반적인 경우에는 크로스 컴파일이 필요하지 않습니다.

Fortran에서 수행하려고 시도한 것의 C/C++ 구현 (많은 컴파일러 용) 인 this macro (단지 gfortran)에서 수행중인 작업을 살펴 ​​보는 것이 좋습니다.

관련 문제