我正在尝试Meson/Ninja
我在其他方面所做的事情make
。我在src
变量中列出了源文件,其中一个是prog.f90
带有 statement的程序call ROUTINE
,预处理器插入sub1, sub2...
了不同的 test-executables之类的名称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
etc,所有.mod
文件都.o
匹配src
。运行ninja -v
它似乎改变的文件被编译的次数与可执行文件的次数一样多。同时 make 只编译它(但由于对象而不是模块之间的依赖关系,然后编译其他文件)。
那么更聪明的方法是什么?