如何用CMake编译libpomelo2?

如何用CMake编译libpomelo2, 或者用gyp编译之后怎么将libpomelo2整合到CMake项目中。

NetEase/libpomelo2

下面这个是我个人参考各位答主的回答情况,可以通过libpomelo的测试编译。

cmake_minimum_required(VERSION 3.10)

project(demo)

# set(CMAKE_C_STANDARD 99)

# libpomelo2
set(POMELO_LOCATION <path>/libpomelo2) # FIXME: change the directory of libpomelo2

# libpomelo2 include path
set(POMELO_INCLUDE 
    ${POMELO_LOCATION}/include
    ${POMELO_LOCATION}/src
)

#  libpomelo2 source path
aux_source_directory(
    ${POMELO_LOCATION}/src/tr/dummy
    POMELO_SOURCE_FILES
)
aux_source_directory(
    ${POMELO_LOCATION}/src/tr/uv
    POMELO_SOURCE_FILES
)
aux_source_directory(
    ${POMELO_LOCATION}/src
    POMELO_SOURCE_FILES
)

# set(
#     POMELO_SOURCE_FILES
#     ${POMELO_LOCATION}/src/pc_pomelo.c
#     ${POMELO_LOCATION}/src/pc_lib.c
#     ${POMELO_LOCATION}/src/pc_trans.c
#     ${POMELO_LOCATION}/src/pc_trans_repo.c
#     ${POMELO_LOCATION}/src/pc_JSON.c
#     ${POMELO_LOCATION}/src/tr/dummy/tr_dummy.c
# )

add_library(
    pomelo2 STATIC ${POMELO_SOURCE_FILES}
)

target_include_directories(
    pomelo2 PRIVATE ${POMELO_INCLUDE}
)

target_link_libraries(
    pomelo2
    uv
    ssl
    crypto
    pthread
)


# prject for test
include_directories(
    ${POMELO_LOCATION}/test
)

add_executable(
    ${CMAKE_PROJECT_NAME}
    main.cpp
)

target_include_directories( ${CMAKE_PROJECT_NAME} PRIVATE
    ${POMELO_INCLUDE}
)

target_link_libraries( ${CMAKE_PROJECT_NAME} PRIVATE
    pomelo2
)

编译libpomelo2需要使用gyp工具生成Makefile,然后使用make命令编译生成静态库或动态库。

以下是使用CMake编译libpomelo2的步骤:

安装依赖

安装libuv、openssl库,例如在Ubuntu上可以使用以下命令安装:

sudo apt-get install libssl-dev libuv1-dev
下载源代码

从GitHub上下载libpomelo2的源代码,例如:

git clone https://github.com/NetEase/libpomelo2.git
cmake_minimum_required(VERSION 3.5)

project(libpomelo2)

set(CMAKE_C_STANDARD 99)

set(SOURCE_FILES
    src/pomelo.c
    src/pomelo_private.h
    src/pomelo_internal.h
    src/pomelo_protocol.c
    src/pomelo_transport.c
    src/pomelo_reconnect.c
    src/pomelo_async.c
    src/pomelo_storage.c
    src/pomelo_sys.c
    src/pomelo_pkg.c
    src/pomelo_ws.c
    )

add_library(pomelo STATIC ${SOURCE_FILES})

target_include_directories(pomelo PRIVATE include)
target_link_libraries(pomelo uv ssl crypto)
编译生成静态库

在源代码目录下创建build目录,进入build目录,执行以下命令编译生成静态库:

cmake ..
make
将生成的静态库添加到CMake项目中

将生成的静态库文件(libpomelo.a)和头文件(pomelo.h)拷贝到CMake项目的相应目录下,然后在CMakeLists.txt文件中添加以下内容:

add_library(pomelo STATIC IMPORTED)
set_property(TARGET pomelo PROPERTY IMPORTED_LOCATION /path/to/libpomelo.a)
target_include_directories(your_project PRIVATE /path/to/pomelo/include)
target_link_libraries(your_project PRIVATE pomelo uv ssl crypto)

其中,/path/to/libpomelo.a和/path/to/pomelo/include需要替换为实际的路径。

该回答引用ChatGPT
要使用CMake编译libpomelo2,您可以按照以下步骤进行操作:

安装CMake和构建工具,例如Make或Ninja。
在libpomelo2源代码目录中创建一个新目录来保存构建文件(例如build目录)。
在该目录中运行命令 cmake /path/to/libpomelo2/source,其中/path/to/libpomelo2/source应替换为libpomelo2源代码的实际路径。
运行命令make或ninja以编译libpomelo2库。
如果您使用gyp编译了libpomelo2,并且想将其整合到CMake项目中,您可以按照以下步骤进行操作:

在CMake项目的CMakeLists.txt文件中,使用add_subdirectory()命令添加libpomelo2的构建目录。
使用target_link_libraries()命令将您的CMake项目与libpomelo2库链接起来。
例如,以下是将libpomelo2添加到CMake项目的示例CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.10)

project(my_project)

Add libpomelo2 subdirectory

add_subdirectory(/path/to/libpomelo2/build)

Add your project executable

add_executable(my_executable main.cpp)

Link with libpomelo2

target_link_libraries(my_executable pomelo2)

其中,/path/to/libpomelo2/build应替换为libpomelo2的实际构建目录。