gpt4 book ai didi

c++ - 使用 clang 和 gfortran 编译

转载 作者:行者123 更新时间:2023-11-30 01:51:55 28 4
gpt4 key购买 nike

我正在尝试编译我最近开始从事的项目,并被要求在 clang 而不是 gcc 中编译代码。该项目有一个 CMake 文件,我尝试使用 cmake 该项目

cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ../src

但是会抛出一个错误,我认为这是因为 clang 没有 Fortran 编译器,而部分项目有 Fortran 代码。有没有办法让它在编译 Fortran 代码时使用 gfortran(以前在使用 gcc 时使用),其余部分使用 clang/clang++?

我认为相关的 cmake 文件部分是:

enable_language(Fortran)

string(REGEX MATCH gfortran HAVE_GFORTRAN ${CMAKE_Fortran_COMPILER})
string(REGEX MATCH xlf HAVE_XLF ${CMAKE_Fortran_COMPILER})
string(REGEX MATCH pg77 HAVE_PG77 ${CMAKE_Fortran_COMPILER})
string(REGEX MATCH g77 HAVE_G77 ${CMAKE_Fortran_COMPILER})
string(REGEX MATCH ifort HAVE_ifORT ${CMAKE_Fortran_COMPILER})
string(REGEX MATCH f77 HAVE_F77 ${CMAKE_Fortran_COMPILER})

if(HAVE_GFORTRAN)
set(F_LIBRARY gfortran CACHE string "fortran library")
find_library(F_LIBRARY NAMES gfortran)
set(FORTRAN_UNDERSCORE end CACHE string "What type of fortran underscore style - linux,end,none")
set(DEF_FORTRAN_UNDERSCORE "#define FORTRAN_UNDERSCORE_END")
elseif(HAVE_XLF)
set(F_LIBRARY xlf90 CACHE string "fortran library")
find_library(F_LIBRARY NAMES xlf90)
set(FORTRAN_UNDERSCORE none CACHE string "What type of fortran underscore style - linux,end,none")
set(DEF_FORTRAN_UNDERSCORE "#define FORTRAN_UNDERSCORE_NONE")
elseif(HAVE_PGF77)
set(F_LIBRARY pgftnrtl CACHE string "fortran library")
find_library(F_LIBRARY NAMES pgftnrtl)
set(FORTRAN_UNDERSCORE end CACHE string "What type of fortran underscore style - linux,end,none")
set(DEF_FORTRAN_UNDERSCORE "#define FORTRAN_UNDERSCORE_END")
elseif(HAVE_G77)
set(F_LIBRARY g2c CACHE string "fortran library")
find_library(F_LIBRARY NAMES g2c)
set(FORTRAN_UNDERSCORE linux CACHE string "What type of fortran underscore style - linux,end,none")
set(DEF_FORTRAN_UNDERSCORE "#define FORTRAN_UNDERSCORE_LINUX")
elseif(HAVE_ifort)
set(F_LIBRARY ifcore CACHE string "fortran library")
find_library(F_LIBRARY NAMES ifcore)
set(FORTRAN_UNDERSCORE end CACHE string "What type of fortran underscore style - linux,end,none")
set(DEF_FORTRAN_UNDERSCORE "#define FORTRAN_UNDERSCORE_END")
elseif(HAVE_F77)
set(FORTRAN_UNDERSCORE end CACHE string "What type of fortran underscore style - linux,end,none")
set(FORTRAN_LIBRARY "" CACHE string "fortran library")
set(DEF_FORTRAN_UNDERSCORE "#define FORTRAN_UNDERSCORE_END")
endif()

# f77 on redstorm currently an exception - doesn't need it
if(NOT F_LIBRARY AND NOT HAVE_F77)
message(FATAL_ERROR "Cannot find fortran library")
endif(NOT F_LIBRARY AND NOT HAVE_F77)

终端输出显示当我尝试 cmake 时出现错误:

message(FATAL_ERROR "Cannot find fortran library")

如果我需要发布更多信息,请告诉我。非常感谢!

最佳答案

为了不让问题悬而未决:

如果 cmake 无法自动确定变量 CMAKE_Fortran_COMPILER,则必须将其设置为编译器可执行文件 (gfortran) 的名称。

关于c++ - 使用 clang 和 gfortran 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25493039/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com