2

我的构建中有一段源代码是通过运行 java 类生成的。

我一生都无法弄清楚如何在依赖项上指示 scons,并且它一直尝试在构建 .class 文件之前构建源代码。

当我执行 o = env.Java(target = 'target_dir', source = Dir('source_dir')) 时,o 被设置为一个空列表。

4

1 回答 1

2

您可以为此使用 Depends() 函数,如下所示:

o = env.Java(target = 'target_dir', source = Dir('source_dir'))
env.Depends(o, 'the_generated_file_and_path')

这是一个更好的选择(因为在调用 Depends() 时您不必担心生成的文件路径),假设您正在使用 SCons Command() 函数执行所述 java 类:

# $SOURCE and $TARGET will be filled in by SCons Command, $SOURCE is optional
cmdLine = 'theCommand $SOURCE $TARGET'

genTarget = env.Command(target = [list output files here],
                        source = 'java_class_executed',
                        action = cmdLine)
...
o = env.Java(...)
env.Depends(o, genTarget)

关于o成为一个空列表,它总是一个空列表吗?如果是这样,请注意如何指定源,它应该是包目录结构的根。例如,如果您的目录树是这样的:

.
|-- SConstruct
`-- src
   `-- com
       `-- tanner
           `-- application
               `-- main.java

您应该按如下方式指定源目录:'#/src/com'

于 2012-05-04T12:22:58.407 回答