[英]Compiling with clang and gfortran
I'm trying to compile a project I recently started working on, and was asked to compile the code in clang instead of gcc.我正在尝试编译一个我最近开始工作的项目,并被要求在 clang 而不是 gcc 中编译代码。 There is a CMake file for the project, and I tried to cmake the project using
该项目有一个 CMake 文件,我尝试使用
cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ../src
However an error is thrown, which I believe is because clang doesn't have a Fortran compiler and part of the project has Fortran code.但是抛出了一个错误,我认为这是因为 clang 没有 Fortran 编译器,并且项目的一部分有 Fortran 代码。 Is there a way to make it use gfortran (previously used when gcc is used) when compiling the Fortran code, and clang/clang++ for the rest?
有没有办法让它在编译 Fortran 代码时使用 gfortran(以前在使用 gcc 时使用),其余部分使用 clang/clang++?
The part of the cmake file which I think is relevant is:我认为相关的 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)
Terminal output says that this is threw an error when I tried cmake:终端输出说当我尝试 cmake 时会抛出一个错误:
message(FATAL_ERROR "Cannot find fortran library")
Please let me know if I need to post any more info.如果我需要发布更多信息,请告诉我。 Many thanks in advance!
提前谢谢了!
In order not to leave the question open:为了不让问题悬而未决:
The variable CMAKE_Fortran_COMPILER
must be set to the name of the compiler executable ( gfortran
) if cmake is not able to determine it automatically.如果 cmake 无法自动确定变量
CMAKE_Fortran_COMPILER
必须设置为编译器可执行文件 ( gfortran
) 的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.