gpt4 book ai didi

gradle - 在父 build.gradle 中动态配置任务

转载 作者:行者123 更新时间:2023-12-05 01:30:53 25 4
gpt4 key购买 nike

我有一个多项目 C++ Gradle 构建,它生成了许多库和可执行文件。我正在尝试获取可执行文件(但不是库)子项目以使用“指纹”对象进行编译。如果我像这样在单个子项目的 build.gradle 中撒一些这样的东西,这会很好用:

compileMain.doFirst {
// code to generate a 'BuildInfo.cpp' from from a template.
// embeds name of executable in so has to be generated anew for each exe
}

遵循 DRY 原则,我宁愿在顶级 build.gradle 中一劳永逸地做这件事.这是我的尝试,仅将其应用于使用 cpp-exe 的子项目。插件,关注 these instructions :
configure(subprojects.findAll { it.plugins.hasPlugin('cpp-exe') }) {
compileMain.doFirst {
// same code as above
}
}

唉,这不会被触发。但是,如果我将这样的内容放在限制较少的 configure 中, 块,这表明查询插件的想法应该有效:
configure(subprojects.findAll { true }) { 
task mydebug << {
if ( project.plugins.hasPlugin( 'cpp-exe' ) ) {
println ">>> $project.name has it!"
}
}
}

可能是插件在 configure 时没有应用于子项目吗?关闭评估(在顶级 build.gradle )?可能有一种更简单的方法来完全实现这一目标?

最佳答案

您可能在子项目的构建脚本中应用了 cpp-exe 插件。默认情况下,父构建脚本先于其子构建脚本进行评估,这解释了为什么它找不到任何应用了 cpp-exe 的项目。

有几种方法可以解决这个问题。一种方法是将特定于 cpp-exe 项目的所有配置(如应用插件和添加操作)移动到同一位置。您要么从父构建脚本中进行所有此类配置(例如通过枚举 cpp-exe 子项目并使用单个 configure(cppExeProjects) { ... } 对其进行配置),要么将 cpp-exe 特定配置移动到其自己的构建脚本中(例如 gradle/cpp-exe.gradle )并应用它来自选定的子项目,如下所示: apply from: "$rootDir/gradle/cpp-exe.gradle"

另一种解决方案是更改构建脚本的评估顺序。但我只会把它作为最后的手段,在这里肯定没有必要。

关于gradle - 在父 build.gradle 中动态配置任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9839127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com