是否可以停止SWIG为Java生成模块类?

时间:2014-11-27 11:22:14

标签: java c++ java-native-interface swig

我已经创建了一个C ++类,我希望能够从Java构造和调用方法。

这是(在名为test_swig_cpp_java.h的文件中):

#ifndef TEST_SWIG_CPP_JAVA_H_
#define TEST_SWIG_CPP_JAVA_H_
class GoOnJavaConstructMe {
public:
    void oohComeOnCallMeYouKnowYouWantTo();
};
#endif

然后我为SWIG创建了一个模块文件(名为test_swig_module.i)并将其放入其中:

%module Test;
%ignore "";
%rename("%s") GoOnJavaConstructMe; 
%rename("%s") GoOnJavaConstructMe::oohComeOnCallMeYouKnowYouWantTo; 
%{
    #include "test_swig_cpp_java.h"
%}
%include "test_swig_cpp_java.h"

我运行以下命令让SWIG执行其操作:

swig -c++ -java test_swig_module.i

并列出了我在目录中的文件,这些文件不是我创建的文件 - 这是列表:

GoOnJavaConstructMe.java
Test.java
TestJNI.java
test_swig_module_wrap.cxx

很好,所以我有一个cxx(test_swig_module_wrap.cxx)文件,我需要用我的C ++代码编译,在Java端,我想要调用的类已经很好地创建了(GoOnJavaConstructMe.java )我可以看到一些JNI声明(TestJNI.java),我还需要使用我的Java gubbins编译。

到目前为止似乎没问题但是Test.java我想知道......当我打开它时,它看起来像这样:

/* ----------------------------------------------------------------------------
 * This file was automatically generated by SWIG (http://www.swig.org).
 * Version 3.0.2
 *
 * Do not make changes to this file unless you know what you are doing--modify
 * the SWIG interface file instead.
 * ----------------------------------------------------------------------------- */


public class Test {
}

一个与SWIG模块同名的空类,很有趣......所以我做了一些research,我发现这被称为模块类,它是一个地方放置全局函数的地方。

是的,公平,我想他们必须去某个地方然后我想,事情是,我将永远不会有任何全局函数,因为我非常具体,我想只公开一个类和方法到Java。

可以在我的构建过程中添加一个步骤,当我运行SWIG后删除此文件,当然,但我不知道......

是否可以停止SWIG为Java生成模块类?

(据我所知,这似乎不是command line option所以我认为答案可能不是,但也许大师们知道一个聪明的把戏也许在模块文件中)

0 个答案:

没有答案