我至少可以回答我的第一点.在深入挖掘源代码(在某些时候它成为最好的文档)后,我发现了检索源代码的方法的实现:
public Set getSrcDirs() {
Set dirs = new LinkedHashSet();
for (DirectoryTree tree : getSrcDirTrees()) {
dirs.add(tree.getDir());
}
return dirs;
}
在DefaultSourceDirectorySet.java中.
gradle-eperimental插件中使用此方法来检索cpp和c源:
languageSourceSets.create(
sourceSetName + "Cpp",CppSourceSet.class,new Action() {
@Override
public void execute(CppSourceSet source) {
source.getSource().setSrcDirs(jni.getSource().getSrcDirs());
source.getSource().include("**/*.C");
source.getSource().include("**/*.CPP");
source.getSource().include("**/*.c++");
source.getSource().include("**/*.cc");
source.getSource().include("**/*.cp");
source.getSource().include("**/*.cpp");
source.getSource().include("**/*.cxx");
source.getSource().exclude(jni.getSource().getExcludes());
source.exportedHeaders(new Action() {
@Override
public void execute(SourceDirectorySet files) {
files.source(jni.getExportedHeaders());
}
});
configurePrebuiltDependency(source,jni);
}
});
在NdkConfiguration.java文件的execute方法中.
对于标题,它是不同的,没有这样的东西
source.getSource()包括( “** / * H.”);
相反,我们有:
for (LanguageSourceSet sourceSet : nativeBinary.getSources()) {
if (sourceSet instanceof HeaderExportingSourceSet) {
HeaderExportingSourceSet source = (HeaderExportingSourceSet) sourceSet;
artifact.getExportedHeaderDirectories().addAll(
source.getExportedHeaders().getSrcDirs());
}
}
在NdkComponentModelPlugin.java的execute方法中.它直接使用默认gradle实现的getSrcDirs方法,该方法在给定的一个下递归地包含所有dir
我将继续调查其他观点
编辑:总结:
1°)
a°)srcDir包括与模式匹配的所有文件:
* .C,* .CPP,*.c,*.cc,* .cp,*.cpp,* .cxx
b°)includeHeaders有效,并且只包含给定文件夹深度的标题(因此,如果要包含它们,则必须将所有子路径提供给标题:#include“test.h”,而不是#include“dir1” /dir2/dir3/test.h”
2°)它看起来我在我的包含中做了一些错误,因为它们现在看起来似乎有效.但是,您不能只包含文件.因此最好包括源文件的顶部目录,然后排除与给定模式不匹配的每个文件(如Alex Cohn答案中所述)
3°)include指令不起作用