4

当 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)出现问题。

4

2 回答 2

3

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

set_property(TARGET your_target PROPERTY LINKER_LANGUAGE Fortran)

或玩CMAKE_<LANG>_LINKER_PREFERENCE(我还没有检查后者现在是否有效,几年前我尝试时它没有工作)。

于 2018-10-05T14:11:00.130 回答
0

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

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)
于 2016-11-23T20:49:08.940 回答