컴파일 할 때 사용할 수있는 MKL 버전에 따라포트란 코드의 다른 라이브러리 (Intel Fortran 컴파일러도 사용하고 있습니다)를 사용하고 싶습니다. 버전 번호에 대한 처리기 매크로를 정의하고 날짜를 구축 MKL의 설치에 포함 된 파일 인터페이스가 - 나는 다음과 같은 흐름이 될 것이라고 생각Fortran에서 파일 인터페이스/헤더 파일의 데이터에 의존하는 전 처리기 지시문을 사용하여 USE 문의 조건부 선택을 수행 할 수 있습니까?
/opt/intel/mkl/include/mkl.fi
: MKL의
- 가져 오기 버전 번호를 파일 인터페이스
- 위에서 언급 한 것은 올바른 라이브러리와 컴파일
use
문을 실행 - 처리기 지시문을 통해
use
에있는 라이브러리를 결정하는 버전 번호를 사용
include
문 다음에 어떤
use
문을 배치하면
그러나, 컴파일 파일 인터페이스의 정보에 의존하거나 처리기 지시문을 사용하여 use
문장의 조건 선택을 달성하기 위해 어떤 방법이 있나요 error #6278: This USE statement is not positioned correctly within the scoping unit.
을 던지는 후 중단 헤더 파일?
가능 얼마나 어떤 use
문이 실행되는 use
문을 결정하는 데 필요한 데이터를 제공하는 include
문 앞에해야하기 때문에 내가 볼 수 없습니다. 내가 할 노력하고있어 보여주는 샘플 아래 포함,하지만 ·
module MKLVersion
!Test for definition and value up here
#ifdef INTEL_MKL_VERSION
#if INTEL_MKL_VERSION >= 110200
use LAPACK95, only : ggevx, geevx, sygvd
#elif INTEL_MKL_VERSION < 110200
use MKL95_LAPACK, only : ggevx, geevx, sygvd
#endif
#endif
! but dont actually get the definition till we get here
include '/opt/intel/mkl/include/mkl.fi'
end module MKLVersion
어쨌든 include를 이전하면 아마도 도움이되지 않을 것입니다 (가능한 경우). 리터럴 포함은 컴파일 단계 _after_ preprocessing에서 발생합니다. 아마도 작동 할 전 처리기'#include '접근법이있을 것입니다. 또는 전 처리기에 값이있는 정의를 전달하십시오. – francescalus
이 질문은 https://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x/topic/676247에서도 논의됩니다. 위치 지정 문제는 다음과 같습니다. INCLUDE 자체는 아니지만 INCLUDE에서 가져온 INTERFACE와 같은 명령. –
그건 나뿐 이었어, 스티브! 나는 당신이 미국 시간에 있고 아마 잠시 동안 대답하지 않을 것이라고 생각하기 때문에 나는 어제 떠났을 때 여기에 올렸습니다. –