Cmake 使用任何编译器编译的最小Fortran文件

Cmake 使用任何编译器编译的最小Fortran文件,cmake,fortran,Cmake,Fortran,CMake开发人员告诉CMake静态库需要与Fortran库链接(例如,将C程序与LAPACK链接时) 我的第一个想法是使用emptydummy.f。但是 什么是最小可移植虚拟Fortran文件 只有旧的英特尔编译器存在空文件问题吗?GFortran和Absoft Fortran的错误相同。实际上,您需要一个“程序”块来构建可执行文件。 这个虚拟的.f可以工作: program dummy end 根据该标准,“Fortran程序必须包含一个主程序,并且可以包含任意数量

CMake开发人员告诉CMake静态库需要与Fortran库链接(例如,将C程序与LAPACK链接时)

我的第一个想法是使用empty
dummy.f
。但是

什么是最小可移植虚拟Fortran文件


只有旧的英特尔编译器存在空文件问题吗?

GFortran和Absoft Fortran的错误相同。实际上,您需要一个“程序”块来构建可执行文件。 这个虚拟的.f可以工作:

      program dummy
      end
根据该标准,“Fortran程序必须包含一个主程序,并且可以包含任意数量的其他类型的程序单元”。(见Adams等人的“Fortran 95手册”,第2.1.1节第19页)

或第12页第2.2.1节:

A program consists of exactly one main program unit and any number
(including zero) of other kinds of program units. The set of program
units may include any combination of the different kinds of program
units in any order as long as there is only one main program unit.

谢谢,但我不需要主程序单元,只需要一个虚拟文件(翻译单元),它将被编译并与不同语言的实际程序链接。GFortran接受空文件:
touch dummy.F;gfortran-c dummy.F
在这种情况下,用子程序替换程序。@marcin。实际上,标准定义了程序单元(函数、子程序、程序)。它不知道什么是“程序文件”,只知道程序单元。因此,空文件根本不定义任何内容。然而,是否仍然可以从空的源文件构建空的对象文件还不完全清楚——我不确定这与Fortran有什么关系。但您仍然可以依赖上面的代码,用cup指出的子程序替换程序。我更关心的是可移植性(即,在流行编译器中如何工作),而不是标准遵从性。我认为@cup提出的空子例程可以工作。OTOH我还认为空文件可以工作,结果证明它至少不能与一个旧编译器一起工作。空例程是一个有效的Fortran程序单元,而不是空文件。难怪如果你不遵循标准,你迟早会遇到可移植性问题(顺便说一句,你真正尝试过多少流行的编译器?你如何判断编译器的流行程度?)-哦,你很快就会发现,如果你想要可移植性,你甚至需要使用Fortran的一个子集:而且还没有完全得到支持。