|
2 | 2 | cmake_minimum_required(VERSION 3.12) |
3 | 3 | project(ip-sockets-cpp-lite) |
4 | 4 |
|
5 | | -option(IP_SOCKETS_CPP_LITE_BUILD_EXAMPLES "Build with examples" ON) |
| 5 | +# ============================================================================= |
| 6 | +# Options |
| 7 | +# ============================================================================= |
6 | 8 |
|
7 | | -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) |
8 | | - |
9 | | -if(WIN32) |
10 | | - |
11 | | - # it prevent create Debug/ and Release folders in Visual Studio |
12 | | - foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} ) |
13 | | - string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG ) |
14 | | - set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_SOURCE_DIR}/bin ) |
15 | | - endforeach() |
| 9 | +option(IP_SOCKETS_CPP_LITE_BUILD_EXAMPLES "Build with examples" OFF) |
16 | 10 |
|
17 | | - set (INSTALL_PATH_BIN "${PROJECT_SOURCE_DIR}/installed/bin/") |
| 11 | +# ============================================================================= |
| 12 | +# Output directories |
| 13 | +# ============================================================================= |
18 | 14 |
|
19 | | -else() # not WIN32 |
| 15 | +# for initialise variables: CMAKE_INSTALL_INCLUDEDIR, CMAKE_INSTALL_LIBDIR, CMAKE_INSTALL_BINDIR |
| 16 | +include(GNUInstallDirs) |
20 | 17 |
|
21 | | - set (INSTALL_PATH_BIN "bin/") |
| 18 | +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) |
22 | 19 |
|
| 20 | +if(WIN32) |
| 21 | + foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) |
| 22 | + string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG) |
| 23 | + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_SOURCE_DIR}/bin) |
| 24 | + endforeach() |
23 | 25 | endif() |
24 | 26 |
|
25 | | -# include all header files from current directory |
| 27 | +# ============================================================================= |
| 28 | +# Collect header files |
| 29 | +# ============================================================================= |
26 | 30 |
|
27 | | -file(GLOB_RECURSE IP_SOCKETS_CPP_LITE_HEADERS *.h) |
| 31 | +# include all header files from current directory |
| 32 | +#file(GLOB IP_SOCKETS_CPP_LITE_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h") |
| 33 | +# manual include header files |
| 34 | +file(GLOB IP_SOCKETS_CPP_LITE_HEADERS |
| 35 | + "${CMAKE_CURRENT_SOURCE_DIR}/include/ip_address.h" |
| 36 | + "${CMAKE_CURRENT_SOURCE_DIR}/include/udp_socket.h" |
| 37 | + "${CMAKE_CURRENT_SOURCE_DIR}/include/tcp_socket.h" |
| 38 | +) |
| 39 | + |
| 40 | +# ============================================================================= |
| 41 | +# Main target |
| 42 | +# ============================================================================= |
28 | 43 |
|
29 | 44 | # it is header only target |
30 | | - |
31 | 45 | add_library (${PROJECT_NAME} INTERFACE) |
32 | 46 | target_sources (${PROJECT_NAME} INTERFACE ${IP_SOCKETS_CPP_LITE_HEADERS}) |
33 | | -target_include_directories(${PROJECT_NAME} INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) |
34 | | -add_custom_target (${PROJECT_NAME}-ide SOURCES ${IP_SOCKETS_CPP_LITE_HEADERS}) |
| 47 | +target_include_directories(${PROJECT_NAME} INTERFACE $<BUILD_INTERFACE: ${CMAKE_CURRENT_SOURCE_DIR}/include> |
| 48 | + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> ) |
| 49 | +# it was need to show header files of INTERFACE target in IDEs like Visual Studio 2015 with CMake < 3.0 |
| 50 | +#add_custom_target (${PROJECT_NAME}-ide SOURCES ${IP_SOCKETS_CPP_LITE_HEADERS}) |
35 | 51 |
|
36 | | -## If this project is added as a subdirectory of another project, export the |
37 | | -## include path to the parent scope. When this is the top-level project |
38 | | -## (used standalone), don't use PARENT_SCOPE to avoid warnings. |
| 52 | +# ============================================================================= |
| 53 | +# Install |
| 54 | +# ============================================================================= |
39 | 55 |
|
40 | | -if(NOT CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) |
41 | | - set(${PROJECT_NAME}_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/include PARENT_SCOPE) |
42 | | -else() |
43 | | - set(${PROJECT_NAME}_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/include) |
44 | | -endif() |
| 56 | +install(TARGETS ${PROJECT_NAME}) |
| 57 | +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
45 | 58 |
|
46 | | -# include examples if the option is enabled |
| 59 | +# ============================================================================= |
| 60 | +# Examples |
| 61 | +# ============================================================================= |
47 | 62 |
|
| 63 | +# include examples if the option is enabled |
48 | 64 | if(IP_SOCKETS_CPP_LITE_BUILD_EXAMPLES) |
49 | 65 | add_subdirectory("./examples") |
50 | 66 | endif() |
0 commit comments