我有一个大项目,使用Swig -includeall标志似乎是有道理的.但是,有些文件我不想扩展,主要是STL库(例如矢量和列表).是否可以使用-includeall标志,但是从扩展中将某些文件列入黑名单(如矢量和列表)?
我不是 SWIG 专家,但查看了最新版本的文档和源代码(特别Source/Modules/main.cxx是读取命令行参数的文件),很明显这样的选项不存在(甚至不是隐藏的)一)。
另一方面,如果您觉得可以很容易地修改源代码来做到这一点。
您可以在文件中添加新的命令行选项main.cxx来添加要排除的文件名,然后比较这些名称以查找匹配项。您可以在文件中添加全局函数Source/Preprocessor/preprocessor.h,该函数已包含在main.cxx.
该-includeall选项的代码位于Source/Preprocessor/cpp.c. 在该文件中还有一个名为的全局变量,在命令行中设置模拟参数时include_all设置该变量1(它将引导您找到执行此类选项的位置)。
现在,在Preprocessor_parse(...)函数中您可以找到解析头文件的位置(对于版本 3.0.12,从第 1715 行开始):
s1 = cpp_include(fn, sysfile);
if (s1) {
/* ....... */
}
Run Code Online (Sandbox Code Playgroud)
您将对这个函数感兴趣String *Swig_last_file(void),它将返回刚刚解析的标题行的文件名。
s1 = cpp_include(fn, sysfile);
if (s1) {
int found = 0;
String* filename = Swig_last_file();
/* Here find for a match in the exclusion list */
if (!found) { /* keep working as usual */
/* ....... */
} /* if found, just ignore the include directive for that file */
Delete(s1);
}
Run Code Online (Sandbox Code Playgroud)
我知道这不是一个完整的解决方案,但希望可以指导您获得所需的行为。