CMCMakeModule/compiler.cmake

88 lines
3.0 KiB
CMake
Raw Normal View History

2020-08-06 16:19:16 +08:00
IF(WIN32)
2019-08-20 15:53:47 +08:00
2020-07-10 17:01:53 +08:00
if(MINGW)
2020-07-11 16:28:18 +08:00
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -std=c99 -g -fchar8_t")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -std=c++2a -g -fchar8_t -Wall")
2019-08-20 15:53:47 +08:00
2020-07-11 16:28:18 +08:00
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -std=c99 -O2 -fchar8_t")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++2a -O2 -fchar8_t")
add_definitions(-D_WIN32_WINNT=0x0601)
2023-02-14 15:22:16 +08:00
endif()
2020-09-29 15:13:31 +08:00
2023-02-14 15:22:16 +08:00
if(MSVC)
2019-08-20 15:53:47 +08:00
OPTION(MSVC_USE_DLL "use MSVC DLL" ON)
2024-07-26 03:23:24 +08:00
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /std:c17 /arch:AVX2")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c17 /std:c++20 /arch:AVX2")
2024-07-26 03:14:30 +08:00
OPTION(MSVC_USE_fsanitize "USE fsanitize" OFF)
if(MSVC_USE_fsanitize)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=address")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address")
endif()
if(MSVC_USE_DLL)
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MDd")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MD")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")
else()
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
endif()
2020-07-10 17:01:53 +08:00
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
2020-09-29 15:13:31 +08:00
add_compile_options(/wd4244) # ->int 精度丢失
add_compile_options(/wd4305) # ->float 精度丢失
add_compile_options(/wd4311) # template
add_compile_options(/wd4800) # ->bool 性能损失
add_compile_options(/wd4804) # unsafe compare
add_compile_options(/wd4805) # unsafe compare
add_compile_options(/wd4819) # ansi->unicode
add_compile_options(/wd4996) # sprintf/sscanf unsafe
2020-07-10 17:01:53 +08:00
endif()
2019-08-20 15:53:47 +08:00
ELSE()
IF(NOT ANDROID)
IF(APPLE)
SET(USE_CLANG ON)
ELSE()
OPTION(USE_CLANG OFF)
2019-08-20 15:53:47 +08:00
ENDIF()
if(USE_CLANG)
SET(CMAKE_C_COMPILER /usr/bin/clang)
SET(CMAKE_CXX_COMPILER /usr/bin/clang++)
endif()
ENDIF()
OPTION(USE_CHAR8_T OFF)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
IF(USE_CHAR8_T)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fchar8_t")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fchar8_t")
ENDIF()
2019-08-20 15:53:47 +08:00
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -ggdb3")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb3")
2019-08-20 15:53:47 +08:00
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Ofast")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast")
ENDIF()
2019-08-20 15:53:47 +08:00
MESSAGE("C Compiler: " ${CMAKE_C_COMPILER})
MESSAGE("C++ Compiler: " ${CMAKE_CXX_COMPILER})
MESSAGE("C Flag: " ${CMAKE_C_FLAGS})
MESSAGE("C++ Flag: " ${CMAKE_CXX_FLAGS})