コンパイルタスクを作成するタスクでビルド時に生成されるヘッダーがありますが、インクリメンタルコンパイルでヘッダーが変更されたときにコンパイルタスクが認識しないという問題があります。したがって、タスクが実行されても、ソースファイルはコンパイルされません。生成されたヘッダを処理するためにgradleインクリメンタルなネイティブC++コンパイルはどうすればできますか?
生成されたヘッダーが「検出されたインクルード」として表示され、ソースファイルが再構築されますが、そうではないと思われます。
以下は私が思いついた最高のものですが、うまくいきません。
apply plugin: 'cpp'
model {
binaries {
all {
cppCompiler.args "-I$buildDir/gen"
}
}
components {
test(NativeExecutableSpec) {
sources {
cpp {
source {
srcDir "."
include "*.cpp"
}
}
}
}
}
}
task generateHeader(type: Copy) {
into "$buildDir/gen"
from(rootProject.file('template.h')) {
rename(/template/, 'generated')
expand([text: 'foo'])
}
}
tasks.all { task ->
def match = task.name =~ /^compile.*Cpp$/
if (match) {
task.dependsOn generateHeader
task.inputs.files project.fileTree(dir: "$buildDir/gen").matching {
include '*.h'
}
}
}
サンプル・プロジェクト:Gradleのフォーラムでhttps://github.com/thejk/gradle-incremental-cpp-generated-header