很抱歉新手问题,但我还没有看到与在gradle项目中将dynamic tasks指定为defaultTask相关的示例或问题。
那么,如何将动态$ boostLibName任务指定为defaultTasks?
defaultTasks 'whatgoeshere'
ext {
// The boost directory, which changes according to version
// there should be a better way to do this
boostDir = './boost_1_53_0'
// The list of boost libraries that we want to build
boostLibs = ['smart_ptr', 'filesystem', 'array.hpp']
}
// Create a task to build each boost library
boostLibs.each { def boostLibName ->
println boostLibName
tasks.create(name: boostLibName, dependsOn: aBoostBcp, type: Exec) {
workingDir project.boostDir
def b2compiler = 'toolset=' + System.properties['boost_toolset']
def b2target = '--with-' + boostLibName
def cmd
if(System.properties['platform'] == 'windows') {
//on windows
cmd = ['cmd', '/c', '.\\b2', b2compiler, b2target]
} else {
//on unix and mac
cmd = ['./b2', b2compiler, b2target]
}
// set exec commandLine
//commandLine cmd.split()
commandLine 'cmd', '/c', 'echo', "Command to execute: $cmd"
}
}
我正在尝试在gradle中实现跨平台的Boost C ++构建,您可以在其中引导构建,构建bcp,使用bcp来自定义命名空间,最后构建我们依赖的每个boost库。 / p>
答案 0 :(得分:1)
这是defaultTasks = boostLibs
,必须在声明boostLibs
后发出。或者,您可以声明一个名为build
的任务,该任务取决于boostLibs
,并使"build"
成为默认任务。
除非您需要从其他构建脚本访问这些属性,否则可以将它们转换为局部变量(例如def boostLibs = ...
而不是ext.boostLibs = ...
。)