在混合语言的cmake项目中使用FORTRAN链接器

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)冲突。

2个回答

3

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

set_property(TARGET your_target PROPERTY LINKER_LANGUAGE Fortran)

或者使用CMAKE_<LANG>_LINKER_PREFERENCE进行操作(我没有检查后者是否适用,因为几年前我尝试时并不起作用)。


0
我认为您现在看到的是链接是通过添加了Fortran库的GCC C++前端执行的。要使链接通过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)

1
当然,我知道这个技巧,不过还是谢谢。我在想是否有更好的方法在cmake中执行此操作。我使用各种编译器套件(Cray、PGI、GNU等),修改CMAKE_CXX_LINK_EXECUTABLE非常麻烦。在这种情况下,Cmake应该使用CMAKE_Fortran_LINK_EXECUTABLE,但我想这还不是一个功能。 - Valentin Clement

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接