diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ca4192..ffc87be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,19 +1,14 @@ cmake_minimum_required(VERSION 3.15.2) # 设置工程名称和语言 -project(NETCDF_CXX) -# 设置编译类型 -set(CMAKE_BUILD_TYPE Release) - -if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows") - # 设置windows安装地址 - set(CMAKE_INSTALL_PREFIX D:/Library) -else() - # 设置Linux/Unix系统安装地址 - set(CMAKE_INSTALL_PREFIX /opt/stow/netcdfcxx_legacy) -endif() +project(netCDF_CXX_LEGACY VERSION 1.0) +# 添加配置配件编写的函数 +include(CMakePackageConfigHelpers) message(STATUS "Platform: " ${CMAKE_HOST_SYSTEM_NAME}) +# 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/) \ No newline at end of file diff --git a/netCDF_CXX_LEGACYConfig.cmake.in b/netCDF_CXX_LEGACYConfig.cmake.in new file mode 100644 index 0000000..02782fa --- /dev/null +++ b/netCDF_CXX_LEGACYConfig.cmake.in @@ -0,0 +1,18 @@ +@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 netcdfcxx_legacy) +set(@PROJECT_NAME@_LIBRARY netcdfcxx_legacy) +set(@PROJECT_NAME@_FOUND 1) + +set(@PROJECT_NAME@_OPENMP @LibLCG_OPENMP@) +set(@PROJECT_NAME@_EIGEN @LibLCG_EIGEN@) + +# include target information +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 48bc4fa..49f3e0c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,8 +8,8 @@ if(netCDF_FOUND) endif() # 设置编译选项 -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") # 设置库文件的输出地址 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) @@ -25,15 +25,34 @@ set_target_properties(netcdfcxx_legacy_static PROPERTIES OUTPUT_NAME "netcdfcxx_ set_target_properties(netcdfcxx_legacy PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(netcdfcxx_legacy_static PROPERTIES CLEAN_DIRECT_OUTPUT 1) # 设置动态库的版本号 -set_target_properties(netcdfcxx_legacy PROPERTIES VERSION 1.0 SOVERSION 1.0) +set_target_properties(netcdfcxx_legacy PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) find_library(NETCDF_LIBRARY netcdf ${netCDF_LIB_DIR}) target_link_libraries(netcdfcxx_legacy PUBLIC ${NETCDF_LIBRARY}) target_link_libraries(netcdfcxx_legacy_static ${NETCDF_LIBRARY}) +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) + # 库的安装命令 -install(TARGETS netcdfcxx_legacy DESTINATION lib) -install(TARGETS netcdfcxx_legacy_static DESTINATION lib) +install(TARGETS netcdfcxx_legacy netcdfcxx_legacy_static + 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}) # 头文件安装命令 install(FILES lib/netcdfcpp.h DESTINATION include/netcdfcxx_legacy) install(FILES lib/ncvalues.h DESTINATION include/netcdfcxx_legacy) diff --git a/stow_config.sh b/stow_config.sh index ce22b7a..3381627 100755 --- a/stow_config.sh +++ b/stow_config.sh @@ -1,3 +1,3 @@ -#!/bin/bash +#!/bin/bash sudo stow --dir=/opt/stow --target=/usr/local netcdfcxx_legacy \ No newline at end of file