Gradle C ++本机构建:如何覆盖多项目构建中的顶级属性

时间:2015-12-27 05:19:19

标签: c++ gradle native multi-project subproject

我需要构建一个包含多个C ++项目的大型源代码树。我想要一个顶级构建文件来定义构建约定,例如公共包含目录和编译器/链接器标志,然后能够覆盖或添加子项目级别的约定。

我能够按如下方式添加到编译器/链接器标志:

顶级构建文件:

subprojects {
      apply plugin: 'cpp'
      ext.commonCompilerArgs = [
          '-Wall',
          '-Werror',
          '-pedantic-errors'
      ]

     components {
        binary(NativeLibrarySpec) {
          sources {
            cpp {
              source {
                srcDir 'src'
                include '*.cpp'
              }

              exportedHeaders {
                srcDir 'include'
                include '*.h'
              }
            }
          }
       }
     }
     binaries.withType(NativeLibraryBinarySpec) {
          // Compiler args
          commonCompilerArgs.forEach { compilerArg ->
          cppCompiler.args << compilerArg
          }
     }

子项目构建文件:

def extraCompilerArgs = [
  '--std=c++11'
]

binaries.all {
  extraCompilerArgs.each { arg ->
    cppCompiler.args << arg
  }
}

但是,我无法应用相同的原则来添加额外的include目录(要添加到编译器参数中)。我在子项目构建文件中尝试了这个:

binaries.withType(NativeLibraryBinarySpec) { binary ->
  binary.headerDirs.add('extra_include_dir')
} 

但它不会添加额外的目录。我在这里做错了什么?

0 个答案:

没有答案