From b9c140e5ef779a0fc1065e326e288fe2cbb97724 Mon Sep 17 00:00:00 2001 From: Yi Zhang Date: Fri, 10 Sep 2021 13:09:39 +0800 Subject: [PATCH] update cmakelists --- CMakeLists.txt | 13 ++++++------- WaveLibConfig.cmake.in | 19 +++++++++++++++++++ auxiliary/CMakeLists.txt | 26 ++++++++++++++++++++++---- src/CMakeLists.txt | 26 ++++++++++++++++++++++---- 4 files changed, 69 insertions(+), 15 deletions(-) create mode 100644 WaveLibConfig.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d2da32..a0d3d33 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,15 +1,14 @@ cmake_minimum_required(VERSION 3.15.2) - # 设置工程名称和语言 -project(WAVELIB) +project(WaveLib VERSION 1.0) +# 添加配置配件编写的函数 +include(CMakePackageConfigHelpers) message(STATUS "Platform: " ${CMAKE_HOST_SYSTEM_NAME}) -if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows") - #set(CMAKE_C_COMPILER gcc) - #set(CMAKE_CXX_COMPILER g++) - set(CMAKE_INSTALL_PREFIX D:/Library) -endif() +# CMake默认的安装路径 Windows下为C:/Program\ Files/${Project_Name} Linux/Unix下为/usr/local message(STATUS "Install prefix: " ${CMAKE_INSTALL_PREFIX}) +# CMake默认的变异类型为空 +message(STATUS "Build type: " ${CMAKE_BUILD_TYPE}) # 添加源文件地址 add_subdirectory(src) diff --git a/WaveLibConfig.cmake.in b/WaveLibConfig.cmake.in new file mode 100644 index 0000000..a1e218c --- /dev/null +++ b/WaveLibConfig.cmake.in @@ -0,0 +1,19 @@ +@PACKAGE_INIT@ + +set(@PROJECT_NAME@_Version "@PROJECT_VERSION@") +set_and_check(@PROJECT_NAME@_INSTALL_PREFIX "${PACKAGE_PREFIX_DIR}") +set_and_check(@PROJECT_NAME@_INC_DIR "${PACKAGE_PREFIX_DIR}/include") +set_and_check(@PROJECT_NAME@_INCULDE_DIR "${PACKAGE_PREFIX_DIR}/include") +set_and_check(@PROJECT_NAME@_LIB_DIR "${PACKAGE_PREFIX_DIR}/lib") +set_and_check(@PROJECT_NAME@_LIBRARY_DIR "${PACKAGE_PREFIX_DIR}/lib") + +set(@PROJECT_NAME@_LIB wavelib) +set(@PROJECT_NAME@_LIBRARY wavelib) +set(@PROJECT_NAME@_FOUND 1) + +set(WauxLib_LIB wauxlib) +set(WauxLib_LIBRARY wauxlib) +set(WauxLib_FOUND 1) + +# include target information +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") \ No newline at end of file diff --git a/auxiliary/CMakeLists.txt b/auxiliary/CMakeLists.txt index 5c6186c..dd2bfde 100644 --- a/auxiliary/CMakeLists.txt +++ b/auxiliary/CMakeLists.txt @@ -13,7 +13,7 @@ set_target_properties(wauxlib_static PROPERTIES OUTPUT_NAME "wauxlib") set_target_properties(wauxlib PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(wauxlib_static PROPERTIES CLEAN_DIRECT_OUTPUT 1) # 设置动态库的版本号 -set_target_properties(wauxlib PROPERTIES VERSION 1.0 SOVERSION 1.0) +set_target_properties(wauxlib PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) target_link_libraries(wauxlib PUBLIC wavelib) target_link_libraries(wauxlib_static PUBLIC wavelib_static) @@ -22,7 +22,18 @@ target_link_libraries(wauxlib_static PUBLIC wavelib_static) set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) # 设置编译选项 -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3") + +set(CONFIG_FILE_PATH lib/cmake/${PROJECT_NAME}) + +configure_package_config_file(${PROJECT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in + ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake + INSTALL_DESTINATION ${CONFIG_FILE_PATH} + NO_CHECK_REQUIRED_COMPONENTS_MACRO) + +write_basic_package_version_file(${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) # 库的安装命令 if(WIN32) @@ -30,6 +41,13 @@ if(WIN32) install(TARGETS wauxlib_static DESTINATION lib) else() install(TARGETS wauxlib wauxlib_static - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) + EXPORT ${PROJECT_NAME}Targets + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib) + install(EXPORT ${PROJECT_NAME}Targets + DESTINATION ${CONFIG_FILE_PATH}) + install(FILES + ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake + ${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + DESTINATION ${CONFIG_FILE_PATH}) endif() \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8020e90..a7f1053 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,12 +13,23 @@ set_target_properties(wavelib_static PROPERTIES OUTPUT_NAME "wavelib") set_target_properties(wavelib PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(wavelib_static PROPERTIES CLEAN_DIRECT_OUTPUT 1) # 设置动态库的版本号 -set_target_properties(wavelib PROPERTIES VERSION 1.0 SOVERSION 1.0) +set_target_properties(wavelib PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) # 设置库文件的输出地址 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) # 设置编译选项 -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3") + +set(CONFIG_FILE_PATH lib/cmake/${PROJECT_NAME}) + +configure_package_config_file(${PROJECT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in + ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake + INSTALL_DESTINATION ${CONFIG_FILE_PATH} + NO_CHECK_REQUIRED_COMPONENTS_MACRO) + +write_basic_package_version_file(${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) # 库的安装命令 if(WIN32) @@ -26,8 +37,15 @@ if(WIN32) install(TARGETS wavelib_static DESTINATION lib) else() install(TARGETS wavelib wavelib_static - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) + EXPORT ${PROJECT_NAME}Targets + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib) + install(EXPORT ${PROJECT_NAME}Targets + DESTINATION ${CONFIG_FILE_PATH}) + install(FILES + ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake + ${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + DESTINATION ${CONFIG_FILE_PATH}) endif() # 头文件安装命令 install(FILES ../header/wavelib.h DESTINATION include)