首页 > 解决方案 > 如何使 scons 中的目标依赖于外部命令?

问题描述

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

即,我超级做作的例子:

你好ç

#include <stdio.h>

external int foo;

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

生成器

#!/bin/bash

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

在 make 这可能是:

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

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

标签: scons

解决方案


听起来你是一个新的 SCons 用户。

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

请注意,我们在 freenode 上还有一个 IRC 频道 #scons 和一个不和谐服务器: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'])

希望有帮助!


推荐阅读