从同一代码库构建多个可执行文件

时间:2019-06-19 21:32:05

标签: fortran ninja meson-build

我正在尝试Meson/Ninja来完成我在make中所做的工作。我在src变量中列出了源文件,其中一个是带有语句prog.f90的程序call ROUTINE,并且预处理程序为不同的测试插入了sub1, sub2...之类的名称,可执行文件1.x, 2.x...。像这样:

project('proj','fortran', version : '0')
flags = ['-cpp','-fmax-errors=3','-Wall','-fcheck=all','-fbacktrace','-Og', ...]
src = ['src/f1.f90', 'src/f2.f90', prog.f90, tools.f90, ...]

progs = [
    ['1.x',   '-DROUTINE=sub1'    ],
    ['2.x',   '-DROUTINE=sub2'    ],
    ['3.x',   '-DROUTINE=sub3'    ],
    ...
]

foreach p : progs
    executable(p[0],   src,fortran_args : flags + [p[1]])
endforeach

它比使用make更快,但是Meson/Ninja可以在更改特定文件时使用所有内核约1秒钟,而make只需2秒,但主要在1个内核上运行。

似乎每个可执行文件都有自己的构建目录,例如build/1x@exe等,其中所有.mod.o个文件都匹配src。在运行ninja -v时,似乎更改后的文件被编译的次数与可执行文件一样多。同时make只编译它的一个(但是由于对象之间而不是模块之间声明的依赖性,因此编译其他文件)。

那么更聪明的方法是什么?

1 个答案:

答案 0 :(得分:0)

最简单的方法是首先从所有其他源文件(即不是 static_library()的所有文件)中创建一个prog.f90,然后将其添加到{{ 1}}对可执行文件大加赞赏。

这最终会变成这样:

link_with