如何使 scons 中的目标依赖于外部命令?

How can I make a target in scons depend on an external command?

如何使 scons 程序依赖于外部程序的输出?如果输出文件已经存在,我也不希望它重新制作它。我假设构建器是可行的方法,但我不太确定如何将命令的输出连接为 scons 下的依赖项。

即,我超级人为的例子:

hello.c

#include <stdio.h>

external int foo;

int main()
{
  printf("My foo is: %d\n", foo);
  return 0;
}

gen.sh

#!/bin/bash

echo "int foo = 125;" > foo.c

在制作中这可能是:

hello: hello.c foo.c
    gcc hello.c foo.c

foo.c: gen.sh
    ./gen.sh

听起来你是 SCons 的新用户。

您最好通读一下用户指南:https://scons.org/doc/production/HTML/scons-user.html

请注意,我们在 freenode 上还有一个 IRC 频道#scons,以及一个 discord 服务器:https://discord.gg/bXVpWAy

当你遇到困难时帮助你。

也就是说这是一个非常简单的 SConstruct,它应该可以满足您的要求:

env=Environment()
# Note that we're listing gen.sh as a source. This ensures if it changes
# foo.c will be regenerated.
env.Command('foo.c','gen.sh','./$SOURCE')
env.Program('hello',['hello.c','foo.c'])

希望对您有所帮助!