2016-10-14 18 views
1

おはようみんな、にCMake、SWIG&共有ライブラリ

は、私はあなたに連絡します。 私はCMakeを使ってSWIGラッパーC++/C#ダイナミックライブラリをコンパイルしてビルドしています。 このラッパーを使用すると、C#の実行プログラムでDLL C++を使用できます。

私はバグのないことを確認するために私のライブラリでCTESTを立ち上げることができます。 "Windows"ライブラリの問題点は、シンボルを使いやすくするためにシンボルをエクスポートする必要があることです。通常のライブラリと が、私は「add_library」に「共有」コマンドを追加します。

add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS}) 

しかし、私はコマンドを知らない「SWIG_ADD_MODULE」を使用する必要があるライブラリがSWIGを投げ構築するための「SHARED "

私が見つけた唯一の解決策は、2つのライブラリを作成することです。 SWIGによってビルドされ、C#コードで使用されます。 2つ目は通常 "add_library"でビルドされ、CTESTプログラムで使用されます。 これは私のCMakeListです:

############################### 
# SWIG LYBRARY 
############################### 
include(GenerateExportHeader) 
SET (MODULE_NAME  Mylib) 
SET (INTERFACE_FILES Mylib.i) 

FIND_PACKAGE(SWIG REQUIRED) 
INCLUDE(${SWIG_USE_FILE}) 

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) 

# call swig as: 'swig -csharp -c++ -outdir XXX' 
SET_SOURCE_FILES_PROPERTIES(${INTERFACE_FILES} PROPERTIES CPLUSPLUS ON) 
SET_SOURCE_FILES_PROPERTIES(${INTERFACE_FILES} PROPERTIES SWIG_FLAGS "-includeall") 

SWIG_ADD_MODULE(${MODULE_NAME} csharp ${INTERFACE_FILES} ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS}) 
SWIG_LINK_LIBRARIES(${MODULE_NAME} ${CSHARP_LIBRARIES}) 
############################### 
# DYNAMIC LYBRARY 
############################### 
add_library(${PROJECT_NAME}Tester SHARED ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_HEADERS}) 
generate_export_header(${PROJECT_NAME}Tester EXPORT_MACRO_NAME OTHER_NAME_EXPORT) 

私は一つだけとの両方が使用可能なを構築する方法を見つけることがしたいです。 あなたの助けのおかげで、素晴らしい週末を持って、 クレマン

あなたの答えのための@Scolliiおかげで、最終的に私はcompilling CMakeのでマクロを作成することによって、私の問題を解決した@fedino
+1

私は同じ問題に直面し、1人ではなく2人のライブラリで終わりました。それはオールインワンを持つよりも利点があります:SWIGを使用すると、多くの言語用に多くのラッパーを作成できます。最終的には、C#ラッパーを使用する場合にのみC#シンボル、Pythonラッパーなどを使用する場合にはPythonシンボルなどを必要とするため、各言語用に1つのラッパー・ライブラリーを使用することをお勧めしました。例えば、C++ライブラリーが多くの人々彼らは、すべてを再コンパイルするのではなく、新しいラッパーモジュールを書くだけで、コアライブラリをラッパーから分離して独立させておくことができます。 – fedino

+0

ここで同じことは、@fedinoと完全に同意します、これは好ましいアプローチです – Schollii

答えて

0

* SWIGコマンドや使用の.oそれは "add_library"に戻ります。このソリューションでは、私のテストに使うことができる本当のSHAREDライブラリを持っています。

関連する問題