mirror of
https://github.com/ttttupup/wxhelper.git
synced 2024-11-05 18:09:24 +08:00
109 lines
3.3 KiB
CMake
109 lines
3.3 KiB
CMake
cmake_minimum_required(VERSION 3.10...3.27)
|
|
|
|
# 设置项目名称和版本
|
|
project(detours VERSION 4.0.1 LANGUAGES C CXX)
|
|
|
|
MACRO(GET_WIN32_WINNT version)
|
|
IF(WIN32 AND CMAKE_SYSTEM_VERSION)
|
|
SET(ver ${CMAKE_SYSTEM_VERSION})
|
|
STRING(REGEX MATCH "^([0-9]+).([0-9])" ver ${ver})
|
|
STRING(REGEX MATCH "^([0-9]+)" verMajor ${ver})
|
|
# Check for Windows 10, b/c we'll need to convert to hex 'A'.
|
|
IF("${verMajor}" MATCHES "10")
|
|
SET(verMajor "A")
|
|
STRING(REGEX REPLACE "^([0-9]+)" ${verMajor} ver ${ver})
|
|
ENDIF("${verMajor}" MATCHES "10")
|
|
# Remove all remaining '.' characters.
|
|
STRING(REPLACE "." "" ver ${ver})
|
|
# Prepend each digit with a zero.
|
|
STRING(REGEX REPLACE "([0-9A-Z])" "0\\1" ver ${ver})
|
|
SET(${version} "0x${ver}")
|
|
ENDIF()
|
|
ENDMACRO()
|
|
|
|
# 根据配置设置DEBUG标志
|
|
set(DETOURS_CONFIG ${CMAKE_BUILD_TYPE})
|
|
if("${DETOURS_CONFIG}" STREQUAL "Debug")
|
|
set(DETOURS_DEBUG 1)
|
|
else()
|
|
set(DETOURS_DEBUG 0)
|
|
endif()
|
|
|
|
####################################################
|
|
|
|
# 设置编译器标志
|
|
set(CMAKE_CXX_FLAGS "/nologo /W4 /WX /we4777 /we4800 /Zi /MT /Gy /Gm- /Zl /Od /DDETOUR_DEBUG=${DETOURS_DEBUG}")
|
|
|
|
|
|
if(WIN32)
|
|
IF(MSVC_VERSION GREATER_EQUAL 1700)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D DETOURS_CL_17_OR_NEWER")
|
|
ENDIF()
|
|
GET_WIN32_WINNT(ver)
|
|
message(STATUS "Windows OS Version: ${ver}")
|
|
if(ver EQUAL 0x0700)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D _USING_V110_SDK71_ /D DETOURS_WIN_7")
|
|
endif()
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D _WIN32_WINNT=${ver}")
|
|
else()
|
|
message(FATAL_ERROR "Only Win32 platforms are supported.")
|
|
endif()
|
|
|
|
|
|
|
|
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "i386")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D _X86_ ")
|
|
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "i686")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D _AMD64_ ")
|
|
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "IA64")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D _IA64_ ")
|
|
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D _X86_ ")
|
|
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D _AMD64_ ")
|
|
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "AMD64")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D _AMD64_ ")
|
|
else()
|
|
message("Unknown architecture (x86, amd64, ia64, arm, arm64)")
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D DETOURS_VERSION=0x4c0c1 /D WIN32_LEAN_AND_MEAN")
|
|
|
|
|
|
if(MSVC)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D _CRT_SECURE_NO_WARNINGS /EHsc")
|
|
|
|
else()
|
|
# TODO: Shall we support gcc with MinGW, Cygwin or Clang based building system on Windows?
|
|
endif()
|
|
|
|
if(ENABLE_VERBOSELOG)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D ENABLE_VERBOSELOG")
|
|
endif()
|
|
|
|
# 设置源文件和目标
|
|
|
|
|
|
set(SOURCES
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/detours.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/modules.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/disasm.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/image.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/creatwth.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/disolx86.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/disolx64.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/disolia64.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/disolarm.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/disolarm64.cpp
|
|
)
|
|
|
|
# 添加库目标
|
|
add_library(detours ${SOURCES})
|
|
target_include_directories(detours INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/src)
|
|
|