我有一个相当简单的build.gradle文件,它构建了一个zlib目录。不幸的是,生成的* .o文件被分散到各个目录中。
e.g。
build/objs/zlib/shared/zlibC/xvtb7xzcn488esep2yp1v714/uncompr.o
build/objs/zlib/shared/zlibC/2osjpf8p443huii37rw8g7o7d/zutil.o
[...]
build/objs/zlib/shared/zlibC/bkho3m4h5simvpsegapx51g54/trees.o
build/objs/zlib/shared/zlibC/2zicemubjlmw82yi1ysriaup4/inflate.o
如何为所有生成的* .o文件(减去unique-id目录)设置输出目录为 build / zlib ?
apply plugin: 'c'
FileCollection zlibfiles = files(
'adler32',
[...]
'trees',
'zutil')
model {
components {
zlib(NativeLibrarySpec) {
sources {
c {
source {
srcDir "."
include '*.c'
}
exportedHeaders {
srcDir '.'
}
}
}
}
}
binaries {
withType(SharedLibraryBinarySpec) {
if (targetPlatform.operatingSystem.linux) {
cppCompiler.args '-c', '-g', '-fPIC'
// relative paths are ignored by Gradle
// only fully qualified paths are recognized
// cppCompiler.args '-I', '../..'
cppCompiler.args '-I', "${rootDir}/zlib"
linker.args '-pthread'
}
}
}
}
我有一个find-copy任务,但这里的目标是正确使用Gradle。我宁愿使用Gradle的gcc / g ++' -o'选项。
task zlibcopy (type: Copy) {
configurations {
conf
}
dependencies {
conf fileTree(dir: "${buildDir}/objs/zlib/shared/zlibC/")
}
from configurations.conf.getAsFileTree()
into "${rootDir}/build/client/ps/common/zlib"
}
Gradle:4.7
CentOS:7.4
Java:1.8.0_144
答案 0 :(得分:0)
显然,Gradle不允许将本机代码输出到指定的输出目录。您可以在唯一标识的输出目录中找到* .o,在“共享”目录中找到* .so,在“静态”目录中找到* .a。真该死!
答案 1 :(得分:-1)
尝试一下,不会包含唯一的目录。
task zlibcopy (type: Copy) {
zlibfiles.each { File file ->
println file.name
from ("${buildDir}/objs/zlib/shared/zlibC/") {
include "**/${file.name}*"
}
includeEmptyDirs = false
eachFile {
def (id, name) = it.path.split('/')
it.relativePath = RelativePath.parse(true, name)
}
into "${rootDir}/build/zlib"
}
}
最后六个* .o文件永远不会被复制
也许这六个文件不包含在zlibfiles
中,因此从未包括在内?