C/C++和Fortran混合编译构建
使用CMake构建C/C++和Fortran混合项目
Fortran调用C/C++函数
main.F90
program main
use iso_c_binding
implicit none
interface
integer(c_int) function add(x,y) bind(c,NAME="add")
use iso_c_binding
integer(c_int),value,intent(in)::x,y
end function add
end interface
block
integer(c_int)::x,y
x=10;
y=20;
print*,add(x,y)
end block
stop
end program main
subs.cpp
extern "C" {
int add(int x, int y)
{
return x+y;
}
}
C/C++调用Fortran函数
main.cpp
#include <iostream>
extern "C"{
int add(int x, int y);
}
int main(int argc, char **argv)
{
int x, y;
x=10;
y=20;
std::cout<<"Add(x,y):"<<add(x,y)<<std::endl;
return(0);
}
subs.F90
function add(x,y) result(r) bind(c,NAME="add")
use iso_c_binding
integer(c_int),value,intent(in)::x,y
integer(c_int)::r
r=x+y
end function
CMakeLists.txt
cmake_minimum_required (VERSION 3.18)
project(Demo LANGUAGES C CXX Fortran)
add_executable(FDemo main.F90 subs.cpp)
add_executable(CDemo main.cpp subs.F90)