我有一个相当简单的build.gradle文件,用于构建zlib目录。不幸的是,生成的* .o文件被分散到各个目录中。例如

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'
            }
        }
    }
}

我有一个查找副本任务,但是这里的目标是正确使用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

最佳答案

显然,Gradle不允许将本机代码输出到指定的输出目录。您可以在唯一标识的输出目录中找到* .o,在“共享”目录中找到* .so,在“静态”目录中找到* .a。真是

10-06 13:07
查看更多