提交 70078293 编写于 作者: X xiaoyi.yl

use cmake in modern way

上级 b89736e7
cmake_minimum_required(VERSION 3.14)
project(oblogmsg)
cmake_minimum_required(VERSION 3.20.0)
project(oblogmsg VERSION 3.2.1)
option(TEST "build tests" OFF)
option(BENCHMARK "build benchmarks" OFF)
option(USE_CXX11_ABI "Build with C++11 ABI" OFF)
include(GNUInstallDirs)
set(CMAKE_VERBOSE_MAKEFILE OFF)
set(CMAKE_INSTALL_PREFIX /home/ds)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel ..." FORCE)
endif()
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
endif ()
add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:_GLIBCXX_USE_CXX11_ABI=0>)
if (NOT USE_CXX11_ABI)
add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:_GLIBCXX_USE_CXX11_ABI=0>)
endif ()
add_subdirectory(src)
add_library(oblogmsg_base INTERFACE)
set(INNER_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include)
set_property(GLOBAL PROPERTY OBLOGMSG_INCLUDE_DIRS ${INNER_INCLUDE_DIRS})
target_include_directories(oblogmsg_base INTERFACE ${INNER_INCLUDE_DIRS})
target_compile_features(oblogmsg_base INTERFACE cxx_std_11)
# Check if oblogmsg is being used directly or via add_subdirectory
set(OBLOGMSG_MASTER_PROJECT OFF)
if(PROJECT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
set(OBLOGMSG_MASTER_PROJECT ON)
endif()
add_subdirectory(src)
if(OBLOGMSG_MASTER_PROJECT)
message(STATUS "git submodule update --init third_party/googletest")
execute_process(COMMAND git submodule update --init third_party/googletest
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMAND_ERROR_IS_FATAL ANY)
set(BUILD_GMOCK OFF CACHE INTERNAL "Builds the googlemock subproject")
set(INSTALL_GTEST OFF CACHE INTERNAL "Enable installation of googletest. (Projects embedding googletest may want to turn this OFF.)")
add_subdirectory(third_party/googletest)
add_subdirectory(unittest)
add_subdirectory(benchmark)
endif()
if (TEST)
execute_process(
COMMAND git submodule init
COMMAND git submodule update
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
)
add_subdirectory(third_party/googletest)
add_subdirectory(unittest)
enable_testing()
endif ()
# If oblogmsg is used via add_subdirectory, by default we don't install it.
option(INSTALL_OBLOGMSG "Whether or not install oblogmsg" ${OBLOGMSG_MASTER_PROJECT})
if (BENCHMARK)
add_subdirectory(benchmark)
endif ()
if(INSTALL_OBLOGMSG)
################# INSTALL ##########################################################################
install(DIRECTORY include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
)
install(TARGETS oblogmsg oblogmsg_static
LIBRARY DESTINATION lib64
ARCHIVE DESTINATION lib64
)
install(TARGETS oblogmsg_shared oblogmsg_static
EXPORT oblogmsg
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
)
install(
DIRECTORY include/ DESTINATION include/logmessage
)
install(EXPORT oblogmsg
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/oblogmsg
FILE oblogmsgConfig.cmake
NAMESPACE oceanbase::
)
set(CPACK_GENERATOR "RPM")
set(CPACK_PACKAGE_NAME "oblogmsg")
set(CPACK_COMPONENTS_IGNORE_GROUPS 1)
set(CPACK_RPM_COMPONENT_INSTALL ON)
set(CPACK_RPM_RELOCATION_PATHS /usr /home/ds)
set(CPACK_PACKAGING_INSTALL_PREFIX /home/ds)
set(CPACK_PACKAGE_VERSION 3.2)
set(CPACK_RPM_PACKAGE_GROUP "Applications/Databases")
set(CPACK_RPM_PACKAGE_LICENSE "Mulan PubL v2.")
set(CPACK_RPM_DEFAULT_USER "admin")
set(CPACK_RPM_DEFAULT_GROUP "admin")
set(CPACK_RPM_SPEC_MORE_DEFINE
"%global _missing_build_ids_terminate_build 0
################# PACKAGE ##########################################################################
set(CPACK_GENERATOR "RPM")
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
set(CPACK_COMPONENTS_IGNORE_GROUPS 1)
set(CPACK_RPM_COMPONENT_INSTALL ON)
set(CPACK_RPM_RELOCATION_PATHS /usr /home/admin/oceanbase)
set(CPACK_PACKAGING_INSTALL_PREFIX /home/admin/oceanbase)
set(CPACK_RPM_PACKAGE_GROUP "Applications/Databases")
set(CPACK_RPM_PACKAGE_LICENSE "Mulan PubL v2.")
set(CPACK_RPM_DEFAULT_USER "admin")
set(CPACK_RPM_DEFAULT_GROUP "admin")
set(CPACK_RPM_SPEC_MORE_DEFINE
"%global _missing_build_ids_terminate_build 0
%global _find_debuginfo_opts -g
%define __debug_install_post %{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} %{_builddir}/%{?buildsubdir};%{nil}
%define debug_package %{nil}")
include(CPack)
add_custom_target(rpm COMMAND +make package)
include(CPack)
endif()
set(SRC_LIST
lmTest.cpp
itoa.cpp
)
add_executable(lmTest ${SRC_LIST})
target_link_libraries(lmTest PUBLIC oblogmsg)
target_compile_options(lmTest PRIVATE -DLMB)
add_executable(lmTest itoa.cpp lmTest.cpp)
target_compile_definitions(lmTest PRIVATE LMB)
target_include_directories(lmTest PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(lmTest PRIVATE oblogmsg_shared)
INCLUDE_DIRECTORIES(
../include
set(SRC_LIST LogMsgBuf.cpp
LogMsgFactory.cpp
LogRecord.cpp
MetaInfo.cpp
MsgType.cpp
MsgVarArea.cpp
)
set(SRC_LIST
MsgType.cpp
LogMsgBuf.cpp
MsgVarArea.cpp
LogRecord.cpp
MetaInfo.cpp
LogMsgFactory.cpp
)
add_library(oblogmsg SHARED ${SRC_LIST})
add_library(oblogmsg_shared SHARED ${SRC_LIST})
add_library(oblogmsg_static STATIC ${SRC_LIST})
target_link_libraries(oblogmsg PUBLIC oblogmsg_base)
target_link_libraries(oblogmsg_static PUBLIC oblogmsg_base)
set_target_properties(oblogmsg_static PROPERTIES OUTPUT_NAME "oblogmsg")
foreach(T IN ITEMS oblogmsg_shared oblogmsg_static)
target_compile_features(${T} PUBLIC cxx_std_11)
set_target_properties(${T} PROPERTIES OUTPUT_NAME oblogmsg
CXX_STANDARD 11
CXX_EXTENSIONS OFF
POSITION_INDEPENDENT_CODE ON)
target_include_directories(${T} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>)
endforeach()
# ensure that the build results can be run on systems with lower libstdc++ version than the build system
target_link_libraries(oblogmsg_shared PRIVATE -static-libstdc++)
# with namespace oceanbase
add_library(oceanbase::oblogmsg_shared ALIAS oblogmsg_shared)
add_library(oceanbase::oblogmsg_static ALIAS oblogmsg_static)
enable_testing()
add_executable(lr_unittest lrTest.cpp)
target_link_libraries(lr_unittest PRIVATE oblogmsg_shared gtest)
add_executable(varArea_unittest varAreaTest.cpp)
target_include_directories(varArea_unittest PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src)
target_link_libraries(varArea_unittest PRIVATE oblogmsg_shared gtest)
add_executable(md_unittest mdTest.cpp)
target_link_libraries(md_unittest PRIVATE oblogmsg_shared gtest)
add_executable(fa_unittest faTest.cpp)
target_link_libraries(fa_unittest PRIVATE oblogmsg_shared gtest)
add_executable(memoryleak_unittest memoryleakTest.cpp)
target_link_libraries(lr_unittest PUBLIC oblogmsg gtest)
target_link_libraries(varArea_unittest PUBLIC oblogmsg gtest)
target_include_directories(varArea_unittest PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../src)
target_link_libraries(md_unittest PUBLIC oblogmsg gtest)
target_link_libraries(fa_unittest PUBLIC oblogmsg gtest)
target_link_libraries(memoryleak_unittest PUBLIC oblogmsg gtest)
target_link_libraries(memoryleak_unittest PRIVATE oblogmsg_shared gtest)
enable_testing()
add_test(lr_unittest lr_unittest)
add_test(md_unittest md_unittest)
add_test(fa_unittest fa_unittest)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册