Использование CMake с компилятором ifort

Я использую CMake 2.8.7 на машине Linux с компиляторами Intel 11.0. Я впервые пытаюсь использовать CMake, так как хотел бы создать этот проект как на Windows, так и на Linux.

Я решил сначала использовать простой подход и использовал стандартный пример Hello World: My src / HelloWorld.f90:

!Test helloworld in Fortran using Cmake
program hello
    print *, "Hello World!"
end program hello

Мой основной CMakeLists.txt:

# States that CMake required version must be greater than 2.8.7
cmake_minimum_required(VERSION 2.8.7)
enable_language (Fortran)
project(helloworld Fortran)
add_subdirectory(src)
SET_TARGET_PROPERTIES(helloworld PROPERTIES LINKER_LANGUAGE FORTRAN)

Мой src / CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.7)

# Include the directory itself as a path to include directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# For a large number of source files you can create it in a simpler way
# using file() function:
file(GLOB helloworld_SOURCES *.f90)

Я по-прежнему получаю сообщение об отсутствии переменной CMAKE_FORTRAN_LINK_EXECUTABLE. Я посмотрел на Учебник Abinader по CMake №1, но пока не имел успеха.

какие-либо предложения?? Заранее спасибо !


person cuda_hpc80    schedule 25.04.2012    source источник
comment
Привет! Вы нашли на это ответ? У меня тоже есть проблемы с ifort, но в другом контексте: Windows. ;-) Похоже, что CMake не очень хорошо поддерживает компилятор Intel Fortran ... :-(   -  person Rick-Rainer Ludwig    schedule 22.07.2012


Ответы (4)


Не прямой ответ, так как я никогда не использовал fortran с cmake, но здесь я вижу несколько проблем.

Прежде всего: где определена ваша цель helloworld? project не является целью.

Во-вторых: где вы используете helloworld_SOURCES переменную?

Попробуйте более обычный способ. В вашем src / CMakeLists.txt добавьте строку в конце файла с:

add_executable(helloworld ${helloworld_SOURCES})

Также удалите SET_TARGET_PROPERTIES(helloworld PROPERTIES LINKER_LANGUAGE FORTRAN) из основного, так как в этом нет необходимости.

Последний совет: старайтесь не использовать file(GLOB ). Список всех файлов лучше определять вручную.

person Michał Walenciak    schedule 30.01.2015

Вероятно, проблема с заглавными буквами "FORTRAN" при установке языка компоновщика. Попробуйте написать его как «Фортран», как в операторе enable_language. CMake извлекает используемые переменные из языка, и это заставляет CMake искать CMAKE_FORTRAN_LINK_EXECUTABLE вместо CMAKE_Fortran_LINK_EXECUTABLE.

person Martin    schedule 26.04.2012
comment
Я использовал CMAKE_Fortran_LINK_EXECUTABLE, но CMake все еще жалуется. Есть ли какой-то флаг, который нужно указать для Фортрана? - person cuda_hpc80; 27.04.2012

Как также упомянул Михал, add_executable необходимо добавить в ваш CMakeLists.txt.

Я проверил вашу проблему с помощью следующих файлов конфигурации CMake

основной CMakeLists.txt:

# States that CMake required version must be greater than 2.8.7
cmake_minimum_required(VERSION 2.8.7)
enable_language (Fortran)
project(helloworld Fortran)
add_subdirectory(src)

src / CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.7)

add_executable(helloworld HelloWorld.f90)

под Linux для следующих версий:

ifort (IFORT) 16.0.0.20150815

cmake версия 2.8.12.2

Я предпочитаю использовать cmake-gui. Здесь вы можете определить компилятор ifort следующим образом:

После определения исходного кода и двоичной папки, например build, нажмите «Настроить» и выберите

cmake-gui_01

Нажмите «Далее» и определите следующие компиляторы.

cmake-gui_02

Нажмите «Готово» и «Создать».

Перейдите в папку build/src и выполните make. Исполняемый файл helloworld успешно сгенерирован с ifort и может быть вызван здесь.

Подсказка: если ifort уже является собственным компилятором по умолчанию на вашем компьютере Linux, вам не нужно указывать его в cmake-gui, и вы можете выбрать первый вариант «Использовать собственные компиляторы по умолчанию».

Надеюсь, поможет.

person CKE    schedule 12.11.2019

Попробуем пошагово:

1) Ваш Fortran Привет, мир в порядке!

src / hello.f90

!Test helloworld in Fortran using Cmake
program hello
     print *, "Hello World!"
end program hello

2) Теперь напишем "внутренний" CMakeLists.txt

src / CMakeLists.txt

add_executable(helloworld hello.f90)
set_target_properties(
    helloworld 

    PROPERTIES 
    LINKER_LANGUAGE Fortran
    RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/build)

Здесь мы создали executable файл, которого у вас нет в вашем вопросе. Кроме того, мы установили его язык компоновщика на Fortran (это параметр с учетом регистра!) И выходной каталог для скомпилированного файла.

3) Теперь создадим «основной» CMakeLists.txt.

CMakeLists.txt

# States that CMake required version must be greater than 2.8.7
cmake_minimum_required(VERSION 2.8.7)

project(helloworld Fortran)

add_subdirectory(src)

Здесь мы указали подкаталог src с внутренним CMakeLists.txt и языком компилятора - достаточно использовать функцию project(), нет необходимости использовать ее вместе с enable_language().

4) Наконец, давайте создадим наш код вне исходного кода и запустим его!

  1. cmake -S . -B build
  2. cmake --build build
  3. ./build/helloworld
person Eenoku    schedule 09.12.2019