【问题标题】:Use FORTRAN linker in cmake mixed language project在 cmake 混合语言项目中使用 FORTRAN 链接器
【发布时间】:2018-10-05 22:11:00
【问题描述】:

当 CMake 用于混合语言项目(C/C++ 和 FORTRAN)时,会调用 C++ 编译器来链接可执行文件。是否有一种简单的方法可以为链接步骤调用 FORTRAN 编译器。

project(Serialbox_Fortran_Perturbation_Example CXX Fortran)

add_executable(main_producer main_producer.f90 m_ser.f90)

这将使用 FORTRAN 编译器正确编译,但对于链接步骤,将调用 C++ 编译器,这会导致某些编译器套件(例如 PGI)出现问题。

【问题讨论】:

    标签: cmake fortran g++ gfortran pgi


    【解决方案1】:

    作为一种解决方法,可以显式设置链接器语言:

    set_property(TARGET your_target PROPERTY LINKER_LANGUAGE Fortran)
    

    或者和CMAKE_<LANG>_LINKER_PREFERENCE一起玩(我现在还没有检查过后者是否有效,几年前我尝试过它并没有成功)。

    【讨论】:

      【解决方案2】:

      我希望您看到的是链接是通过 GCC C++ 前端执行的 添加了 Fortran 库。通过 GCC Fortran 前端完成链接 这个黑客应该做的:

      project(Serialbox_Fortran_Perturbation_Example CXX Fortran)
      set(CMAKE_CXX_LINK_EXECUTABLE "gfortran <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS>  -o <TARGET> <LINK_LIBRARIES>")
      add_executable(main_producer main_producer.f90 m_ser.f90)
      

      【讨论】:

      • 当然,我知道这个技巧,谢谢。我想知道在 cmake 中是否有更好的方法来执行此操作。我正在使用各种编译器套件(Cray、PGI、GNU,...),修改 CMAKE_CXX_LINK_EXECUTABLE 很麻烦。在这种情况下,Cmake 应该使用 CMAKE_Fortran_LINK_EXECUTABLE 但我想它还不是一个功能。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 2018-02-06
      相关资源
      最近更新 更多