swig基本入门

内容是从http://www.swig.org/Doc1.3/SWIG.html#SWIG_nn2上摘抄,是为了理解更深入。
1. 运行swig
在命令行输入:swig [ options] filename
option包括:
-allegrocl            Generate ALLEGROCL wrappers
-chicken              Generate CHICKEN wrappers
-clisp                Generate CLISP wrappers
-cffi                 Generate CFFI wrappers
-csharp               Generate C# wrappers
-guile                Generate Guile wrappers
-java                 Generate Java wrappers
-lua                  Generate Lua wrappers
-modula3              Generate Modula 3 wrappers
-mzscheme             Generate Mzscheme wrappers
-ocaml                Generate Ocaml wrappers
-perl                 Generate Perl wrappers
-php                  Generate PHP wrappers
-pike                 Generate Pike wrappers
-python               Generate Python wrappers
-r                    Generate R (aka GNU S) wrappers
-ruby                 Generate Ruby wrappers
-sexp                 Generate Lisp S-Expressions wrappers
-tcl                  Generate Tcl wrappers
-uffi                 Generate Common Lisp / UFFI wrappers
-xml                  Generate XML wrappers

-c++                  Enable C++ parsing
-Dsymbol              Define a preprocessor symbol
-Fstandard            Display error/warning messages in commonly used format
-Fmicrosoft           Display error/warning messages in Microsoft format
-help                 Display all options
-Idir                 Add a directory to the file include path
-lfile                Include a SWIG library file.
-module name          Set the name of the SWIG module
-o outfile            Name of output file
-outcurrentdir       Set default output dir to current dir instead of input file's path
-outdir dir           Set language specific files output directory
-swiglib              Show location of SWIG library
-version              Show SWIG version number
2. swig输入格式
%module mymodule
%{
#include "myheader.h"
%}
int foo;
...
3. SWIG输出
设定swig输出文件格式
$ swig -c++ -python -o example_wrap.cpp example.i
4. 注释
swig曾经将C++注释语句生成文档文件,现在swig在修复这样的功能。

5. C预处理器
swig通过升级的C预处理器进行预处理。swig支持所有标准预处理语句,包括inclusion, conditional, compilation和macro。然而会忽略#include声明语句,除非额外添加--includeall语句,这是因为有时候swig会用于处理原始的C头文件,这时候可能希望只需要头文件中的部分内容而不是全部。
swig会忽略%{...%}块中间的所有的文本内容。
swig预处理器包含了一些宏,使其比C预处理器功能更强大。

6. SWIG指令
swig的指令前通常添加一个%号,这是为了和C语言的命令区分开来。尽管SWIG不是一种C语言的子语言,但是可以在C的头文件中包含swig语句,类似于下面代码
/* header.h  --- Some header file */

/* SWIG directives -- only seen if SWIG is running */ 
#ifdef SWIG
%module foo
#endif
7. 解析器的限值
尽管swig能够解析大多数的C/C++语句,但是并不能解析所有语句,这些语句大多数据非常复杂的类型声明,或C++的一些高级用法。通常下面的语句是不支持的:
  • 非标准的类型声明,例如const int extern Number;
  • 在C++源文件中运行SWIG
  • nested classes
如果遇见不能解析的语句,编译器可能会跳过这段代码。





你可能感兴趣的:(OpenStudio,C++ToRuby)