JNI的CMake项目

时间:2017-06-03 10:50:14

标签: java c++ linux windows cmake

好的,我的目的是为mac,windows和linux创建动态库,以便与Java一起使用(32位和64位)。

我正在使用Jetbrains产品,在我看来,我设想TeamCity我可以为每个平台构建代理(我已经设置了),然后为每个平台生成库。

我的CMake项目是在CLion中完成的。我对CMake有点困惑。

这是我目前的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的概念感到困惑,到目前为止,我认为它有点像设置生成器,然后你在想要设置你的程序的机器上运行它,但是我没有&# 39;理解为什么它已经创建了我的dll库。

这就是我想要的行为,我不想在机器上运行设置,我希望我的.dll和.so文件准备就绪,准备就绪了。

无论如何,为了解决这个问题,生成的库实际上是否可用于分发?如果是这样,我如何让它在linux上生成.so文件,并在Windows上使用相同的cmakelists.txt生成.dll文件?此外,依赖关系会被添加到库中吗?

最后,编译器CMake将使用什么?我在Windows上使用mac,cygwin和mingw-64,我认为在ubuntu上只有gcc。

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

我的要求摘要清单:

  • 库需要以32位和64位构建(对于32位和64位Java)Compiling 32 and 64 bit
  • 需要将其构建为.dll和.so
  • 如果存在依赖关系,则应将它们放在输出文件夹中的dll / so旁边,或者更好,如果可能的话,将它们放在我的一个dll中。

我一直试图将各种信息放在一起,但我无法按照我想要的方式获取信息。

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

0 个答案:

没有答案