相关疑难解决方法(0)

GNU Makefile规则从单个源文件生成一些目标

我试图做以下事情.有一个程序,调用它foo-bin,它接收一个输入文件并生成两个输出文件.一个愚蠢的Makefile规则是:

file-a.out file-b.out: input.in
    foo-bin input.in file-a.out file-b.out
Run Code Online (Sandbox Code Playgroud)

但是,这并没有make以任何方式告诉两个目标将同时生成.make在串行运行时这很好,但如果一个人尝试make -j16或同样疯狂的话,可能会造成麻烦.

问题是,是否存在为这种情况编写正确的Makefile规则的方法?很明显,它会生成一个DAG,但不知何故,GNU make手册没有说明如何处理这种情况.

两次运行相同的代码并仅生成一个结果是不可能的,因为计算需要时间(想想:小时).仅输出一个文件也相当困难,因为它经常用作GNUPLOT的输入,GNUPLOT不知道如何只处理数据文件的一小部分.

makefile

96
推荐指数
5
解决办法
3万
查看次数

GNU make:单个规则中的多个目标

可能重复:
GNU Makefile规则从单个源文件生成一些目标

如果我有这样的Makefile规则:

a b c:
    echo "Creating a b c"
    touch a b c

output: a b c
    cat a b c > output
Run Code Online (Sandbox Code Playgroud)

然后我运行make -j9输出

make看到3个依赖项(a,b,c),查找如何生成它们:(上面的"ab c"规则),但接下来会发生什么?如果没有意识到"ab c"规则只需要运行一次来​​创建所有3个目标吗?

这就是实际做的事情:

[pavel@orianna test]$ make -j9 output -n
echo "Creating a b c"
touch a b c
echo "Creating a b c"
touch a b c
echo "Creating a b c"
touch a b c                                                                                                                                                                                                                                                                    
cat a b c > output                                                                                                                                                                                                                                                             
[pavel@orianna test]$
Run Code Online (Sandbox Code Playgroud)

相同的配方运行3次,每次依赖一次以规则"输出"!

有谁知道它为什么会这样?

makefile gnu-make

28
推荐指数
2
解决办法
3万
查看次数

标签 统计

makefile ×2

gnu-make ×1