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_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–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.15/module/FortranCInterface.html