如何将动态任务设置为defaultTask

时间:2013-06-06 23:10:17

标签: boost gradle

很抱歉新手问题,但我还没有看到与在gradle项目中将dynamic tasks指定为defaultTask相关的示例或问题。

那么,如何将动态$ boostLibName任务指定为defaultTasks?

的build.gradle

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>

1 个答案:

答案 0 :(得分:1)

这是defaultTasks = boostLibs,必须在声明boostLibs后发出。或者,您可以声明一个名为build的任务,该任务取决于boostLibs,并使"build"成为默认任务。

除非您需要从其他构建脚本访问这些属性,否则可以将它们转换为局部变量(例如def boostLibs = ...而不是ext.boostLibs = ...。)