Spec-Zone.ru › CMake

FortranCInterface

Обнаружение интерфейса Fortran/C

Этот модуль автоматически обнаруживает API, посредством которого языки C и Fortran взаимодействуют.

Переменные модуля

Переменные, указывающие, найдено ли преобразование имен:

FortranCInterface_GLOBAL_FOUND

Глобальные подпрограммы и функции.

FortranCInterface_MODULE_FOUND

Подпрограммы и функции модуля (объявленные с помощью "MODULE PROCEDURE").

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

FortranCInterface_GLOBAL_PREFIX

Префикс для глобального символа без нижнего подчеркивания.

FortranCInterface_GLOBAL_SUFFIX

Суффикс для глобального символа без нижнего подчеркивания.

FortranCInterface_GLOBAL_CASE

Регистр для глобального символа без нижнего подчеркивания, либо UPPER , либо LOWER.

FortranCInterface_GLOBAL__PREFIX

Префикс для глобального символа с нижним подчеркиванием.

FortranCInterface_GLOBAL__SUFFIX

Суффикс для глобального символа с нижним подчеркиванием.

FortranCInterface_GLOBAL__CASE

Регистр для глобального символа с нижним подчеркиванием, либо UPPER , либо LOWER.

FortranCInterface_MODULE_PREFIX

Префикс для символа модуля без нижнего подчеркивания.

FortranCInterface_MODULE_MIDDLE

Средняя часть символа модуля без нижнего подчеркивания, которая расположена между именем модуля и именем символа.

FortranCInterface_MODULE_SUFFIX

Суффикс для символа модуля без нижнего подчеркивания.

FortranCInterface_MODULE_CASE

Регистр для символа модуля без нижнего подчеркивания, либо UPPER , либо LOWER.

FortranCInterface_MODULE__PREFIX

Префикс для символа модуля с нижним подчеркиванием.

FortranCInterface_MODULE__MIDDLE

Средняя часть символа модуля с нижним подчеркиванием, которая расположена между именем модуля и именем символа.

FortranCInterface_MODULE__SUFFIX

Суффикс для символа модуля с нижним подчеркиванием.

FortranCInterface_MODULE__CASE

Регистр для символа модуля с нижним подчеркиванием, либо UPPER , либо LOWER.

Функции модуля

FortranCInterface_HEADER

Функция FortranCInterface_HEADER предназначена для создания файла заголовка C, содержащего макросы для преобразования имен символов:

FortranCInterface_HEADER(<file>
                         [MACRO_NAMESPACE <macro-ns>]
                         [SYMBOL_NAMESPACE <ns>]
                         [SYMBOLS [<module>:]<function> ...])

Она генерирует в <file> определения следующих макросов:

#define FortranCInterface_GLOBAL (name,NAME) ...
#define FortranCInterface_GLOBAL_(name,NAME) ...
#define FortranCInterface_MODULE (mod,name, MOD,NAME) ...
#define FortranCInterface_MODULE_(mod,name, MOD,NAME) ...

Эти макросы преобразуют четыре категории символов Fortran, соответственно:

  • Глобальные символы без '_': call mysub()
  • Глобальные символы с '_': call my_sub()
  • Символы модулей без '_': use mymod; call mysub()
  • Символы модулей с '_': use mymod; call my_sub()

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

Параметры:

MACRO_NAMESPACE

Заменить стандартный префикс FortranCInterface_ заданным именем пространства имён <macro-ns>.

SYMBOLS

Список символов для автоматического преобразования имен с помощью определений препроцессора C:

<function>          ==> #define <ns><function> ...
<module>:<function> ==> #define <ns><module>_<function> ...

Если преобразование имени для какого-либо символа неизвестно, то определение препроцессора не создается, и отображается сообщение об ошибке.

SYMBOL_NAMESPACE

Добавить префикс к всем определениям препроцессора, сгенерированным опцией SYMBOLS , заданным именем пространства имён <ns>.

FortranCInterface_VERIFY

Функция FortranCInterface_VERIFY предназначена для проверки совместной работы компиляторов Fortran и C/C++:

FortranCInterface_VERIFY([CXX] [QUIET])

Она проверяет, успешно ли компилируется и линкуется простое тестовое исполняемое приложение, использующее Fortran и C (и C++, если задана опция CXX). Результат сохраняется в записи кэша FortranCInterface_VERIFIED_C (или FortranCInterface_VERIFIED_CXX , если задана CXX ) как булево значение. Если проверка завершается неудачно, и QUIET не задана, функция завершается с сообщением об ошибке, описывающей проблему. Цель этой проверки — прервать сборку на ранней стадии для несовместимых комбинаций компиляторов. Тест строится в конфигурации Release.

Пример использования

include(FortranCInterface)
FortranCInterface_HEADER(FC.h MACRO_NAMESPACE "FC_")

Это создаёт заголовок "FC.h", который определяет макросы преобразования имен FC_GLOBAL(), FC_GLOBAL_(), FC_MODULE(), и FC_MODULE_().

include(FortranCInterface)
FortranCInterface_HEADER(FCMangle.h
                         MACRO_NAMESPACE "FC_"
                         SYMBOL_NAMESPACE "FC_"
                         SYMBOLS mysub mymod:my_sub)

Это создаёт заголовок "FCMangle.h", который определяет те же макросы преобразования имен FC_*() , что и в предыдущем примере, плюс символы препроцессора FC_mysub и FC_mymod_my_sub.

Дополнительные преобразования имен

FortranCInterface знает о возможных GLOBAL и MODULE преобразованиях имен для многих компиляторов Fortran, но также предоставляет интерфейс для указания новых возможных преобразований. Установите переменные:

FortranCInterface_GLOBAL_SYMBOLS
FortranCInterface_MODULE_SYMBOLS

перед включением FortranCInterface, чтобы указать преобразования имен для символов MySub, My_Sub, MyModule:MySub, и My_Module:My_Sub. Например, код:

set(FortranCInterface_GLOBAL_SYMBOLS mysub_ my_sub__ MYSUB_)
  #                                  ^^^^^  ^^^^^^   ^^^^^
set(FortranCInterface_MODULE_SYMBOLS
    __mymodule_MOD_mysub __my_module_MOD_my_sub)
  #   ^^^^^^^^     ^^^^^   ^^^^^^^^^     ^^^^^^
include(FortranCInterface)

сообщает FortranCInterface попробовать заданные GLOBAL и MODULE преобразования имен. (Знаки «^» указывают на исходные имена символов для большей ясности в данном примере, но они не нужны).

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/module/FortranCInterface.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API