Spec-Zone.ru › CMake 3.5

FortranCInterface

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

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

FortranCInterface_GLOBAL_FOUND = Global subroutines and functions
FortranCInterface_MODULE_FOUND = Module subroutines and functions
                                 (declared by "MODULE PROCEDURE")

Предоставляется функция для генерации файла заголовка 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, соответственно:

- Global symbols without '_': call mysub()
- Global symbols with '_'   : call my_sub()
- Module symbols without '_': use mymod; call mysub()
- Module symbols with '_'   : 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>».

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

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.

Предоставляется ещё одна функция для проверки совместной работы компиляторов Fortran и C/C++:

FortranCInterface_VERIFY([CXX] [QUIET])

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

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

Spec-Zone.ru

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