From 50026803040c1f8c1a16b71b3d0123b90f551aca Mon Sep 17 00:00:00 2001 From: likepeng Date: Thu, 11 Jan 2024 18:03:35 +0800 Subject: [PATCH] support pack deb --- CMakeLists.txt | 63 +++---------------- Config.cmake.in | 4 -- cmake/InstallingConfigs.cmake | 34 ++++++++++ cmake/Packing.cmake | 27 ++++++++ docker/README.md | 7 +++ .../{ubuntu2004.dockerfile => dev.dockerfile} | 0 docker/docker_build.bash | 2 +- launcher/CMakeLists.txt | 1 + {conf => launcher/conf}/sys.json | 0 myframe/CMakeLists.txt | 2 + myframe/Config.cmake.in | 4 ++ 11 files changed, 86 insertions(+), 58 deletions(-) delete mode 100644 Config.cmake.in create mode 100644 cmake/InstallingConfigs.cmake create mode 100644 cmake/Packing.cmake rename docker/{ubuntu2004.dockerfile => dev.dockerfile} (100%) rename {conf => launcher/conf}/sys.json (100%) create mode 100644 myframe/Config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index a5f0e5a..99e574c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,9 @@ option(MYFRAME_INSTALL_DEPS "Install deps" ON) option(MYFRAME_GENERATE_EXAMPLE "Generate example library" ON) option(MYFRAME_GENERATE_TEST "Generate test executable program" ON) +### cmake module +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") + ### compile option set(CMAKE_C_VISIBILITY_PRESET hidden) set(CMAKE_CXX_VISIBILITY_PRESET hidden) @@ -20,20 +23,13 @@ else() message(STATUS "Set default cxx standard 17") endif() -### output path -set(MYFRAME_OUTPUT_ROOT "${CMAKE_BINARY_DIR}/output") -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${MYFRAME_OUTPUT_ROOT}/lib) -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${MYFRAME_OUTPUT_ROOT}/lib) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${MYFRAME_OUTPUT_ROOT}/bin) - ### install path if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/${CMAKE_PROJECT_NAME}" CACHE PATH "myframe default install prefix" FORCE) - message(STATUS "Set default install prefix $ENV{HOME}/${CMAKE_PROJECT_NAME}") + message(STATUS "Set default install prefix ${CMAKE_INSTALL_PREFIX}") else() message(STATUS "Set install prefix ${CMAKE_INSTALL_PREFIX}") + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") endif() -set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") set(MYFRAME_BIN_DIR "bin") set(MYFRAME_INC_DIR "include") set(MYFRAME_LIB_DIR "lib") @@ -72,18 +68,17 @@ install(FILES PERMISSIONS OWNER_READ GROUP_READ WORLD_READ DESTINATION . ) -INSTALL(PROGRAMS +install(PROGRAMS "tools/gen_mod_proj.py" DESTINATION ${MYFRAME_BIN_DIR} ) install(DIRECTORY templates DESTINATION .) -install(DIRECTORY conf DESTINATION .) install(DIRECTORY DESTINATION ${MYFRAME_LOG_DIR}) install(DIRECTORY DESTINATION ${MYFRAME_SERVICE_DIR}) install(CODE " file( WRITE ${CMAKE_INSTALL_PREFIX}/version.txt - \"${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH}\" + \"${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}\" ) ") if (MYFRAME_INSTALL_DEPS) @@ -91,48 +86,10 @@ if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.21") install(IMPORTED_RUNTIME_ARTIFACTS jsoncpp_lib) install(IMPORTED_RUNTIME_ARTIFACTS glog::glog) install(IMPORTED_RUNTIME_ARTIFACTS gflags) +else() + message(WARNING "Can not install deps lib, cmake version ${CMAKE_VERSION} < 3.21") endif() endif() ### package -include(InstallRequiredSystemLibraries) -set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") -set(CPACK_PACKAGE_VERSION_MAJOR "${${PROJECT_NAME}_VERSION_MAJOR}") -set(CPACK_PACKAGE_VERSION_MINOR "${${PROJECT_NAME}_VERSION_MINOR}") -set(CPACK_PACKAGE_VERSION_PATCH "${${PROJECT_NAME}_VERSION_PATCH}") -include(CPack) - -### export cmake file -install(EXPORT "${PROJECT_NAME}Targets" - FILE "${PROJECT_NAME}Targets.cmake" - DESTINATION lib/cmake/${PROJECT_NAME} -) - -include(CMakePackageConfigHelpers) -# generate the config file that is includes the exports -configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" - INSTALL_DESTINATION "lib/cmake/${PROJECT_NAME}" - NO_SET_AND_CHECK_MACRO - NO_CHECK_REQUIRED_COMPONENTS_MACRO -) - -# generate the version file for the config file -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" - VERSION "${PROJECT_VERSION}" - COMPATIBILITY SameMinorVersion -) - -# install the configuration file -install(FILES - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" - DESTINATION lib/cmake/${PROJECT_NAME} -) - -# generate the export targets for the build tree -# needs to be after the install(TARGETS ) command -export(EXPORT "${PROJECT_NAME}Targets" - FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake" -) +include(Packing) diff --git a/Config.cmake.in b/Config.cmake.in deleted file mode 100644 index ac260c0..0000000 --- a/Config.cmake.in +++ /dev/null @@ -1,4 +0,0 @@ - -@PACKAGE_INIT@ - -include ( "${CMAKE_CURRENT_LIST_DIR}/myframeTargets.cmake" ) diff --git a/cmake/InstallingConfigs.cmake b/cmake/InstallingConfigs.cmake new file mode 100644 index 0000000..7c8a81a --- /dev/null +++ b/cmake/InstallingConfigs.cmake @@ -0,0 +1,34 @@ +# export cmake file +install(EXPORT "${PROJECT_NAME}Targets" + FILE "${PROJECT_NAME}Targets.cmake" + DESTINATION lib/cmake/${PROJECT_NAME} +) + +include(CMakePackageConfigHelpers) +# generate the config file that is includes the exports +configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + INSTALL_DESTINATION "lib/cmake/${PROJECT_NAME}" + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO +) + +# generate the version file for the config file +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + VERSION "${PROJECT_VERSION}" + COMPATIBILITY SameMinorVersion +) + +# install the configuration file +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + DESTINATION lib/cmake/${PROJECT_NAME} +) + +# generate the export targets for the build tree +# needs to be after the install(TARGETS ) command +export(EXPORT "${PROJECT_NAME}Targets" + FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake" +) diff --git a/cmake/Packing.cmake b/cmake/Packing.cmake new file mode 100644 index 0000000..a5b452e --- /dev/null +++ b/cmake/Packing.cmake @@ -0,0 +1,27 @@ +include(InstallRequiredSystemLibraries) + +set(CPACK_PACKAGE_NAME ${PROJECT_NAME} CACHE STRING "The resulting package name") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "C++ application framework" + CACHE STRING "Package description for the package metadata" +) +set(CPACK_STRIP_FILES YES) +set(CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS + OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE +) +set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) +set(CPACK_PACKAGE_CONTACT "likepeng0418@163.com") +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") +set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") + +# deb +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "likepeng <${CPACK_PACKAGE_CONTACT}>") +set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT) +set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE) +set(CPACK_DEB_COMPONENT_INSTALL YES) +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS YES) + +include(CPack) diff --git a/docker/README.md b/docker/README.md index 6c1c545..25f9ab2 100644 --- a/docker/README.md +++ b/docker/README.md @@ -7,9 +7,16 @@ myframe安装目录:`/usr/local` ## 构建docker镜像 ```sh +# eg: +# myframe_version: 0.9.1 bash docker_build.bash ``` +## 构建好的docker镜像 +```sh +docker pull docker.io/likepeng0418/myframe:amd64- +``` + ## 创建运行docker容器 ```sh docker run -itd \ diff --git a/docker/ubuntu2004.dockerfile b/docker/dev.dockerfile similarity index 100% rename from docker/ubuntu2004.dockerfile rename to docker/dev.dockerfile diff --git a/docker/docker_build.bash b/docker/docker_build.bash index 65b8287..5fcb668 100644 --- a/docker/docker_build.bash +++ b/docker/docker_build.bash @@ -36,7 +36,7 @@ function main { "${cmd[@]}" \ --build-arg myframe_version=$1 \ --ulimit nofile=102400:102400 \ - -f "ubuntu2004.dockerfile" \ + -f "dev.dockerfile" \ -t "${IMAGE_NAME}:${tag}" \ "${MYFRAME_ROOT}" } diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt index 3a61699..a689a86 100644 --- a/launcher/CMakeLists.txt +++ b/launcher/CMakeLists.txt @@ -17,3 +17,4 @@ install(TARGETS ${DIR_NAME} ARCHIVE DESTINATION ${MYFRAME_LIB_DIR} RUNTIME DESTINATION ${MYFRAME_BIN_DIR} ) +install(DIRECTORY conf DESTINATION .) diff --git a/conf/sys.json b/launcher/conf/sys.json similarity index 100% rename from conf/sys.json rename to launcher/conf/sys.json diff --git a/myframe/CMakeLists.txt b/myframe/CMakeLists.txt index fb79071..b1686c2 100644 --- a/myframe/CMakeLists.txt +++ b/myframe/CMakeLists.txt @@ -52,3 +52,5 @@ install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION ${MYFRAME_LIB_DIR} RUNTIME DESTINATION ${MYFRAME_BIN_DIR} ) + +include(InstallingConfigs) \ No newline at end of file diff --git a/myframe/Config.cmake.in b/myframe/Config.cmake.in new file mode 100644 index 0000000..3fe5b14 --- /dev/null +++ b/myframe/Config.cmake.in @@ -0,0 +1,4 @@ + +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")