mirror of
https://github.com/cpm-cmake/CPM.cmake.git
synced 2025-11-17 22:58:14 -05:00
80 lines
2.1 KiB
CMake
80 lines
2.1 KiB
CMake
|
|
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
|
||
|
|
|
||
|
|
project(CPMExampleASIOStandalone)
|
||
|
|
|
||
|
|
# ---- Dependencies ----
|
||
|
|
|
||
|
|
include(../../cmake/CPM.cmake)
|
||
|
|
|
||
|
|
find_package(Threads REQUIRED)
|
||
|
|
|
||
|
|
CPMAddPackage(
|
||
|
|
NAME asio
|
||
|
|
VERSION 1.16.1
|
||
|
|
GITHUB_REPOSITORY chriskohlhoff/asio
|
||
|
|
GIT_TAG asio-1-16-1 # asio uses non-standard version tag, we must specify GIT_TAG
|
||
|
|
)
|
||
|
|
|
||
|
|
# ASIO doesn't use CMake, we have to configure it manually.
|
||
|
|
# Extra notes for using on Windows:
|
||
|
|
# 1) If _WIN32_WINNT is not set, ASIO assumes _WIN32_WINNT=0x0501, i.e. Windows XP target,
|
||
|
|
# which is definitely not the platform which most users target.
|
||
|
|
# 2) WIN32_LEAN_AND_MEAN is defined to make Winsock2 work.
|
||
|
|
if(asio_ADDED)
|
||
|
|
add_library(asio INTERFACE)
|
||
|
|
|
||
|
|
target_include_directories(asio
|
||
|
|
INTERFACE ${asio_SOURCE_DIR}/asio/include
|
||
|
|
)
|
||
|
|
|
||
|
|
target_compile_definitions(asio
|
||
|
|
INTERFACE
|
||
|
|
ASIO_STANDALONE
|
||
|
|
ASIO_NO_DEPRECATED
|
||
|
|
)
|
||
|
|
|
||
|
|
target_link_libraries(asio
|
||
|
|
INTERFACE
|
||
|
|
Threads::Threads
|
||
|
|
)
|
||
|
|
|
||
|
|
if(WIN32)
|
||
|
|
# macro see @ https://stackoverflow.com/a/40217291/1746503
|
||
|
|
macro(get_win32_winnt version)
|
||
|
|
if (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()
|
||
|
|
|
||
|
|
if(NOT DEFINED _WIN32_WINNT)
|
||
|
|
get_win32_winnt(ver)
|
||
|
|
set(_WIN32_WINNT ${ver})
|
||
|
|
endif()
|
||
|
|
|
||
|
|
message(STATUS "Set _WIN32_WINNET=${_WIN32_WINNT}")
|
||
|
|
|
||
|
|
target_compile_definitions(asio
|
||
|
|
INTERFACE
|
||
|
|
_WIN32_WINNT=${_WIN32_WINNT}
|
||
|
|
WIN32_LEAN_AND_MEAN
|
||
|
|
)
|
||
|
|
endif()
|
||
|
|
endif()
|
||
|
|
|
||
|
|
# ---- Executable ----
|
||
|
|
|
||
|
|
add_executable(CPMExampleASIOStandalone main.cpp)
|
||
|
|
target_link_libraries(CPMExampleASIOStandalone asio)
|