Собственная сборка Gradle C ++: как переопределить свойства верхнего уровня в многопроектной сборке

Мне нужно построить большое дерево исходников, содержащее несколько проектов C ++. Я хотел бы иметь файл сборки верхнего уровня, который определяет соглашения о сборке, такие как общие каталоги include и флаги компилятора / компоновщика, а затем иметь возможность переопределять или добавлять соглашения на уровне подпроекта.

Я смог добавить к флаги компилятора / компоновщика следующим образом:

Файл сборки верхнего уровня:

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

Однако я не могу применить тот же принцип для добавления дополнительных каталогов включения (которые будут добавлены к аргументам компилятора). Я попробовал это в файле сборки подпроекта:

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

но это не добавляет дополнительный каталог. Что я здесь не так делаю?

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]