因为Gradle基于Java之类的目录结构来编译C / C ++代码,所以我需要构建一组选择文件组的资源外生成目录,以构建不同的产品。除了为每个产品和每个列表构造一个副本之外,还有没有办法将列表和参数传递给任务?
apply plugin: 'c'
buildDir = new File(rootProject.projectDir, '/build/assembly')
FileCollection listA = files(
'dir1/A',
'dir1/B',
'dir2/C')
FileCollection listB = files(
'dir1/M',
'dir2/N',
'dir4/Q')
FileCollection listC = files(
'dir1/X',
'dir2/Y',
'dir4/Z')
task product1() {
task prep(listA, P1)
task prep(listB, P1)
}
task product2() {
task prep(list, P2)
task prep(list, P2)
}
task setup() {
task prep(listA)
task prep(listB)
}
task prep (type: Copy, List: alist) {
alist.each { File file ->
println "Copying into -> " + file.name
from "${projectDir}/file.name"
into "${buildDir}/file.name"
}
}
model {
[...]
}
理想情况下,使用gcc,用户将列出要构建/链接的文件以及输出应到达的位置。
例如
gcc -c -o /home/build/prod1/A.o /home/tree/prod/dir1/A.c
gcc -c -o /home/build/prod1/B.o /home/tree/prod/dir1/B.c
[...]
gcc -o /home/tree/build/prod1/prod1.so /home/build/prod1/A.o /home/build/prod1/B.o ...
使用Gradle,我似乎不得不为每种产品创建构建目录,仅复制要构建的文件,然后查找* .o文件并将其复制到另一个链接位置。还是我不正确地将Gradle用于本机构建?