diff --git a/CMakeLists.txt b/CMakeLists.txt index 70ebde5..b64fe8f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,9 +4,10 @@ project(transm VERSION 1.2.3 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) +include(config/MSystem.cmake) set(PROJECT_URL "https://www.sinxmiao.cn/taynpg/transm") # 将 CMAKE_SYSTEM_PROCESSOR 转换为小写 -string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" CMAKE_SYSTEM_PROCESSOR_LOWER) +# string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" CMAKE_SYSTEM_PROCESSOR_LOWER) set(COMPILER_ID ${CMAKE_CXX_COMPILER_ID}) if(MSVC) add_compile_options(/source-charset:utf-8) @@ -77,6 +78,13 @@ install(FILES ${WIN_XP_COLOR_TOOL} DESTINATION bin) endif() # ********************************************************** pack infomation +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCH_BIT "64Bit") +elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(ARCH_BIT "32Bit") +else() + message(FATAL_ERROR "Unknown target architecture") +endif() set(CPACK_PACKAGE_NAME "transm") set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}") set(CPACK_PACKAGE_CONTACT "taynpg ") @@ -101,6 +109,5 @@ elseif(UNIX AND NOT APPLE) elseif(APPLE) set(CPACK_GENERATOR "DragNDrop") endif() -# 这里的打包信息,具体只在 "本机生成本机程序" 时才是正确的,如果是交叉编译器,或者使用 -m32 等改变目标架构,这里的信息是不准确的 -set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-v${PROJECT_VERSION}-${COMPILER_ID}.${CMAKE_SYSTEM_PROCESSOR_LOWER}") +set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-v${PROJECT_VERSION}-${COMPILER_ID}.${SYSTEM_ARCH}.${ARCH_BIT}") include(CPack) diff --git a/config/MSystem.cmake b/config/MSystem.cmake new file mode 100644 index 0000000..6c719c1 --- /dev/null +++ b/config/MSystem.cmake @@ -0,0 +1,43 @@ +# 获取一些常见的本机系统(注意是本机,非交叉编译器的信息)信息 +if (UNIX) +execute_process( + COMMAND uname -a + OUTPUT_VARIABLE UNAME_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +if(UNAME_OUTPUT MATCHES "x86_64") + set(SYSTEM_ARCH "x86_64") +elseif(UNAME_OUTPUT MATCHES "aarch64") + set(SYSTEM_ARCH "aarch64") +elseif(UNAME_OUTPUT MATCHES "armv7l") + set(SYSTEM_ARCH "armv7l") +elseif(UNAME_OUTPUT MATCHES "i686") + set(SYSTEM_ARCH "i686") +elseif(UNAME_OUTPUT MATCHES "riscv64") + set(SYSTEM_ARCH "riscv64") +else() + set(SYSTEM_ARCH "unknown") +endif() + +elseif (WIN32) + # 先调用 ver 命令 + execute_process(COMMAND ver + OUTPUT_VARIABLE VER_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(VER_OUTPUT MATCHES "XP") + set(SYSTEM_ARCH "x86") + else() + execute_process(COMMAND wmic os get osarchitecture + OUTPUT_VARIABLE WMIC_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(WMIC_OUTPUT MATCHES "64") + set(SYSTEM_ARCH "x86_64") + else() + set(SYSTEM_ARCH "x86") + endif() + endif() +else() +message(FATAL_ERROR "unknow system type.") +endif() +message(STATUS "SYSTEM_ARCH: ${SYSTEM_ARCH}") \ No newline at end of file