You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by li...@apache.org on 2026/07/09 12:02:47 UTC
(rocketmq-clients) branch cpp-cmake-install-uninstall created (now a011d3bb)
This is an automated email from the ASF dual-hosted git repository.
lizhimins pushed a change to branch cpp-cmake-install-uninstall
in repository https://gitbox.apache.org/repos/asf/rocketmq-clients.git
at a011d3bb [C++] Add CMake install/uninstall support and enable tests in CI
This branch includes the following new commits:
new a011d3bb [C++] Add CMake install/uninstall support and enable tests in CI
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(rocketmq-clients) 01/01: [C++] Add CMake install/uninstall support and enable tests in CI
Posted by li...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
lizhimins pushed a commit to branch cpp-cmake-install-uninstall
in repository https://gitbox.apache.org/repos/asf/rocketmq-clients.git
commit a011d3bb6730de1d7167481cabb9f337073bdf19
Author: lizhimins <70...@qq.com>
AuthorDate: Thu Jul 9 19:42:58 2026 +0800
[C++] Add CMake install/uninstall support and enable tests in CI
---
.github/workflows/cpp_build.yml | 3 +-
.github/workflows/cpp_coverage.yml | 3 +-
cpp/.bazelignore | 1 +
cpp/CMakeLists.txt | 66 +++++++++++++++++++++++++++++++++++---
cpp/cmake/cmake_uninstall.cmake.in | 23 +++++++++++++
cpp/cmake/rocketmq-config.cmake.in | 10 ++++++
cpp/source/CMakeLists.txt | 11 +++++--
7 files changed, 108 insertions(+), 9 deletions(-)
diff --git a/.github/workflows/cpp_build.yml b/.github/workflows/cpp_build.yml
index ef3bfb32..066b4201 100644
--- a/.github/workflows/cpp_build.yml
+++ b/.github/workflows/cpp_build.yml
@@ -65,7 +65,8 @@ jobs:
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="$TEMP_DIR/grpc-install" \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
- -DBUILD_EXAMPLES=OFF
+ -DBUILD_EXAMPLES=OFF \
+ -DBUILD_TESTS=ON
cmake --build build --parallel 4 --config Release
- name: Run Unit Tests
diff --git a/.github/workflows/cpp_coverage.yml b/.github/workflows/cpp_coverage.yml
index 41521112..9d3c65fa 100644
--- a/.github/workflows/cpp_coverage.yml
+++ b/.github/workflows/cpp_coverage.yml
@@ -45,7 +45,8 @@ jobs:
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_C_FLAGS="--coverage" \
-DCMAKE_CXX_FLAGS="--coverage" \
- -DBUILD_EXAMPLES=OFF
+ -DBUILD_EXAMPLES=OFF \
+ -DBUILD_TESTS=ON
cmake --build build --parallel 4
- name: Run tests
diff --git a/cpp/.bazelignore b/cpp/.bazelignore
new file mode 100644
index 00000000..378eac25
--- /dev/null
+++ b/cpp/.bazelignore
@@ -0,0 +1 @@
+build
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index 444e2ceb..bbde66a3 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -1,13 +1,15 @@
cmake_minimum_required(VERSION 3.16)
-project(rocketmq)
+project(rocketmq VERSION 5.1.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+include(GNUInstallDirs)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
-find_package(protobuf CONFIG REQUIRED)
-find_package(gRPC CONFIG REQUIRED)
+# Minimum versions aligned with the gRPC 1.46.x dependency chain (gRPC 1.46 bundles protobuf 3.19)
+find_package(protobuf 3.19 CONFIG REQUIRED)
+find_package(gRPC 1.46 CONFIG REQUIRED)
find_package(absl REQUIRED)
-find_package(OpenSSL REQUIRED)
+find_package(OpenSSL 1.1 REQUIRED)
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/proto/apache/rocketmq/v2/definition.proto")
message(FATAL_ERROR "Proto files not found. Run: git submodule update --init --recursive")
@@ -28,7 +30,7 @@ if (BUILD_EXAMPLES)
add_subdirectory(examples)
endif ()
-option(BUILD_TESTS "Build unit tests or not" ON)
+option(BUILD_TESTS "Build unit tests or not" OFF)
if (BUILD_TESTS)
enable_testing()
include(FetchContent)
@@ -68,3 +70,57 @@ if (BUILD_TESTS)
add_subdirectory(source/scheduler/tests)
add_subdirectory(source/stats/tests)
endif ()
+
+# Install targets
+
+include(CMakePackageConfigHelpers)
+
+# Shared library: self-contained, exported for downstream find_package()
+# Note: static library (rocketmq) is not installed — on Windows its .lib
+# would collide with the shared library's import library (also .lib).
+install(TARGETS rocketmq_shared
+ EXPORT rocketmq-targets
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+)
+
+install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/rocketmq
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+ FILES_MATCHING PATTERN "*.h"
+ PATTERN "Tracing.h" EXCLUDE
+)
+
+install(EXPORT rocketmq-targets
+ FILE rocketmq-targets.cmake
+ NAMESPACE rocketmq::
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/rocketmq
+)
+
+configure_package_config_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/rocketmq-config.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/rocketmq-config.cmake
+ INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/rocketmq
+)
+write_basic_package_version_file(
+ ${CMAKE_CURRENT_BINARY_DIR}/rocketmq-config-version.cmake
+ VERSION ${PROJECT_VERSION}
+ COMPATIBILITY SameMajorVersion
+)
+install(FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/rocketmq-config.cmake
+ ${CMAKE_CURRENT_BINARY_DIR}/rocketmq-config-version.cmake
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/rocketmq
+)
+
+# Uninstall target
+if(NOT TARGET uninstall)
+ configure_file(
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
+ IMMEDIATE @ONLY
+ )
+ add_custom_target(uninstall
+ COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
+ )
+endif()
diff --git a/cpp/cmake/cmake_uninstall.cmake.in b/cpp/cmake/cmake_uninstall.cmake.in
new file mode 100644
index 00000000..1bf01a33
--- /dev/null
+++ b/cpp/cmake/cmake_uninstall.cmake.in
@@ -0,0 +1,23 @@
+if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+ message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+endif()
+
+file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
+string(REGEX REPLACE "\n$" "" files "${files}")
+string(REGEX REPLACE "\n" ";" files "${files}")
+list(REVERSE files)
+foreach(file ${files})
+ message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
+ if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+ execute_process(
+ COMMAND "@CMAKE_COMMAND@" -E remove "$ENV{DESTDIR}${file}"
+ OUTPUT_VARIABLE rm_out
+ RESULT_VARIABLE rm_retval
+ )
+ if(NOT "${rm_retval}" STREQUAL 0)
+ message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
+ endif()
+ else()
+ message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
+ endif()
+endforeach()
diff --git a/cpp/cmake/rocketmq-config.cmake.in b/cpp/cmake/rocketmq-config.cmake.in
new file mode 100644
index 00000000..17619fa6
--- /dev/null
+++ b/cpp/cmake/rocketmq-config.cmake.in
@@ -0,0 +1,10 @@
+@PACKAGE_INIT@
+
+include(CMakeFindDependencyMacro)
+
+find_dependency(absl)
+find_dependency(gRPC)
+
+include("${CMAKE_CURRENT_LIST_DIR}/rocketmq-targets.cmake")
+
+check_required_components(rocketmq)
diff --git a/cpp/source/CMakeLists.txt b/cpp/source/CMakeLists.txt
index d860f8e4..dda06faa 100644
--- a/cpp/source/CMakeLists.txt
+++ b/cpp/source/CMakeLists.txt
@@ -47,12 +47,17 @@ target_link_libraries(rocketmq_shared
PUBLIC
absl::base
gRPC::grpc++
+ $<BUILD_INTERFACE:opencensus::trace>
+ PRIVATE
fmt
proto
- opencensus::trace
opencensus::stats
opencensus_proto
spdlog)
+target_include_directories(rocketmq_shared
+ PUBLIC
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(VERSION_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/exports.map)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--version-script=${VERSION_SCRIPT}")
@@ -62,5 +67,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
endif()
set_target_properties(rocketmq_shared
PROPERTIES
+ VERSION ${PROJECT_VERSION}
+ SOVERSION ${PROJECT_VERSION_MAJOR}
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
- LIBRARY_OUTPUT_NAME rocketmq)
\ No newline at end of file
+ LIBRARY_OUTPUT_NAME rocketmq)