29 Kasım 2018 Perşembe

swig (Simplified Wrapper and Generator) komutu

Giriş
swig dosyaları genellikle "*.i" uzantısına sahip. swig ile üretilen şeyi ayrı bir jar veya assembly yapmak iyi bir fikir. Açıklaması şöyle.
Whether you are just wrapping a few classes or en entire SDK and whether you write your own C++/CLI interoperability code, it is always good practice to have the C++/CLI code in a separate assembly since you will deal with unmanaged code and unmanaged code debugging which you WANT to centralize in a single component.

Swig Dosyası Formatı
%{...%}
Açıklaması şöyle.
The code between %{ and %} is copied directly into the generated wrapper. 
Örnek
Şeklen şöyledir.
%module foo

%{
#include<foo.h>
%}

%include foo.h
Örnek
Şöyle yaparız
/* file : gfg.i */

/* name of module to use*/
%module gfg 
%{ 
    /* Every thing in this file is being copied in  
     wrapper file. We include the C header file necessary 
     to compile the interface */
    #include "gfg.h" 

    /* variable declaration*/
    double myvar; 
%} 

/* explicitly list functions and variables to be interfaced */
double myvar; 
long long int fact(long long int n1); 
int my_mod(int m, int n); 

/* or if we want to interface all functions then we can simply 
   include header file like this -  
   %include "gfg.h" 
*/

Komut Satırı Seçenekleri

-csharp seçeneği
C# kodu üretmek için kullanırız.
Örnek
C++'tan C# üretmek için şöyle yaparız.
swig -c++ -csharp -v foo.i
Örnek
Bir projede şu seçenekleri kullanarak kod üretmiştik. -c++ ile C++ parsing etkinleştirildi.
swig -c++ -csharp -o cswrapp.cpp -oh cswrap.h -dllimport mylib 
  -outdir d:\test mycs.i
-cgo seçeneği
go dosyası üretmek için -cgo kullanırız. Burada module ismi swig inpute dosyası yerine -module seçeneği ile komut satırından veriliyor. Şöyle yaparız.
swig -go -cgo -intgosize 64 -module mylib \
-o $WORK/mylib/_obj/mylib_wrap.cxx \
-outdir $WORK/mylib/_obj/ \
-I/mylib/lib \
-c++ mylib.swigcxx
-I seçeneği
Include dizinini belirtir.

-python seçeneği
Şöyle yaparız.
$(SWIG_PATH)\swig.exe -python gfg.i

Hiç yorum yok:

Yorum Gönder