我的构建中有一段源代码是通过运行 java 类生成的。
我一生都无法弄清楚如何在依赖项上指示 scons,并且它一直尝试在构建 .class 文件之前构建源代码。
当我执行 o = env.Java(target = 'target_dir', source = Dir('source_dir')) 时,o 被设置为一个空列表。
我的构建中有一段源代码是通过运行 java 类生成的。
我一生都无法弄清楚如何在依赖项上指示 scons,并且它一直尝试在构建 .class 文件之前构建源代码。
当我执行 o = env.Java(target = 'target_dir', source = Dir('source_dir')) 时,o 被设置为一个空列表。
您可以为此使用 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'