-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
73 lines (59 loc) · 3.12 KB
/
CMakeLists.txt
File metadata and controls
73 lines (59 loc) · 3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
cmake_minimum_required(VERSION 3.12)
project(ip-sockets-cpp-lite)
# =============================================================================
# Options
# =============================================================================
option(IP_SOCKETS_CPP_LITE_BUILD_EXAMPLES "Build with examples" OFF)
# =============================================================================
# Output directories
# =============================================================================
# for initialise variables: CMAKE_INSTALL_INCLUDEDIR, CMAKE_INSTALL_LIBDIR, CMAKE_INSTALL_BINDIR
include(GNUInstallDirs)
# when this project is the root - set output to own bin/, otherwise inherit from parent
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
if(WIN32)
foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_SOURCE_DIR}/bin)
endforeach()
endif()
endif()
# =============================================================================
# Collect header files
# =============================================================================
# include all header files from current directory
#file(GLOB IP_SOCKETS_CPP_LITE_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h")
# manual include header files
file(GLOB IP_SOCKETS_CPP_LITE_HEADERS
"${CMAKE_CURRENT_SOURCE_DIR}/include/ip_address.h"
"${CMAKE_CURRENT_SOURCE_DIR}/include/udp_socket.h"
"${CMAKE_CURRENT_SOURCE_DIR}/include/tcp_socket.h"
)
# =============================================================================
# Main target
# =============================================================================
# it is header only target
add_library (${PROJECT_NAME} INTERFACE)
target_sources (${PROJECT_NAME} INTERFACE ${IP_SOCKETS_CPP_LITE_HEADERS})
target_include_directories(${PROJECT_NAME} INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/ip-sockets-lite> )
# link pthreads on Linux (sockets use threads for examples and may be used in threaded apps)
if(NOT WIN32)
find_package(Threads)
target_link_libraries(${PROJECT_NAME} INTERFACE Threads::Threads)
endif()
# it was need to show header files of INTERFACE target in IDEs like Visual Studio 2015 with CMake < 3.0
#add_custom_target (${PROJECT_NAME}-ide SOURCES ${IP_SOCKETS_CPP_LITE_HEADERS})
# =============================================================================
# Install
# =============================================================================
install(TARGETS ${PROJECT_NAME})
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ip-sockets-lite)
# =============================================================================
# Examples
# =============================================================================
# include examples if the option is enabled
if(IP_SOCKETS_CPP_LITE_BUILD_EXAMPLES)
add_subdirectory("./examples")
endif()