CME项目为JNI

好吧,我的意图是创builddynamic库的Mac,Windows和Linux与Java(32位和64位)使用。

我正在使用Jetbrains的产品,在我看来,我认为,通过TeamCity,我可以为每个平台(我已经设置好)构build代理,然后为每个平台生成这些库。

我的CMake项目是在CLION中完成的 。 尽pipe我有点困惑。

这是目前我的cmakelists.txt:

cmake_minimum_required(VERSION 3.7) project(TestProject) set(CMAKE_CXX_STANDARD 14) function(build bits) message("Building ${bits} bits...") set(CMAKE_BUILD_TYPE Release) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin${bits}") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "bin${bits}") if (WIN32) include_directories("C:/Program Files/Java/jdk1.8.0_121/include" "C:/Program Files/Java/jdk1.8.0_121/include/win32") endif (WIN32) #Includes for linux and mac here set(SOURCE_FILES src/main.cpp) set(EXEC_SOURCE_FILES ${SOURCE_FILES} src/main.cpp) add_library(TestProject SHARED ${SOURCE_FILES}) endfunction() if (CMAKE_SIZEOF_VOID_P EQUAL 8) build(64) else (CMAKE_SIZEOF_VOID_P EQUAL 8) build(32) endif (CMAKE_SIZEOF_VOID_P EQUAL 8) 

我很困惑CMake的概念,到目前为止,我认为它有点像一个设置生成器,然后你运行在你想要设置你的程序的机器上,但我不明白为什么它已经在创build我的dll库。

这就是我想要的行为,但我不希望安装程序在机器上运行,我希望我的.dll和.so文件准备好并准备就绪,就这样了。

无论如何,为了解决这个问题,生产的图书馆是否可以用于分发? 如果是这样,我怎样才能让它在linux上生成.so文件,在Windows上使用相同的cmakelists.txt生成.dll文件? 此外,依赖项是否被添加到库中?

最后,CMake将使用什么编译器? 我在Windows上使用了mac,cygwin和mingw-64,我觉得在Ubuntu上只有gcc。

我可能太愚蠢了,但我似乎无法理解CMake。

我的要求总结清单:

  • 库需要build立在32位和64位(对于32位和64位Java) 编译32位和64位
  • 它需要被构build为.dll和.so
  • 如果有依赖关系,它们应该放在dll / so在输出文件夹中,或者更好,如果可能的话,把它们放在我的一个DLL /所以。

我一直在试着从各处汇集各种信息,但我无法按照自己想要的方式得到它。

最后,我很抱歉,如果这不是一个合适的问题,但我不知道还有什么要问的。 如果有更好的地方,让我知道,我会删除并重新发布那里。