-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProject.cmake
More file actions
47 lines (40 loc) · 1.5 KB
/
Copy pathProject.cmake
File metadata and controls
47 lines (40 loc) · 1.5 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
# ------ Set the basic options for the project ------- #
message(STATUS "# Set the basic options for the project")
function(project_options)
cmake_parse_arguments(
ARG # Options / Single Value / Multi Value
""
"TARGET_TYPE;"
""
${ARGN})
if (NOT DEFINED ARG_TARGET_TYPE)
set(ARG_TARGET_TYPE "PRIVATE")
endif()
if (${ARG_TARGET_TYPE} STREQUAL "PUBLIC")
set(TARGET_TYPE PUBLIC)
elseif (${ARG_TARGET_TYPE} STREQUAL "PRIVATE")
set(TARGET_TYPE PRIVATE)
elseif (${ARG_TARGET_TYPE} STREQUAL "INTERFACE")
set(TARGET_TYPE INTERFACE)
else()
message(FATAL_ERROR "# Fatal Error : The target type(${ARG_TARGET_TYPE}) is invalid")
endif()
message(STATUS "- Compiler : ${CMAKE_CXX_COMPILER_ID}")
# INTERFACE library targets have no compiled object of their own, so CMake only
# accepts the INTERFACE keyword for their properties - PUBLIC/PRIVATE are rejected
# even if that's what the caller (or our own default above) asked for.
get_target_property(ARG_TARGET_TYPE ${PROJECT_NAME} TYPE)
if (${ARG_TARGET_TYPE} STREQUAL "INTERFACE_LIBRARY")
set(TARGET_TYPE INTERFACE)
endif()
target_compile_features(${PROJECT_NAME} ${TARGET_TYPE} cxx_std_17)
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
add_compile_options(/Zi /MP)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_compile_options(-g -Wall -Wextra)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
add_compile_options(-g -Wall -Wextra)
else()
message(FATAL_ERROR "The Compiler ${CMAKE_CXX_COMPILER_ID} is not supported")
endif()
endfunction()