added cmake
This commit is contained in:
parent
ebbfacecba
commit
47212c2679
49
src/CMakeLists.txt
Normal file
49
src/CMakeLists.txt
Normal file
|
@ -0,0 +1,49 @@
|
|||
cmake_minimum_required(VERSION 3.21)
|
||||
project(Engine)
|
||||
|
||||
# set output directories
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/static)
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
|
||||
# configure C11
|
||||
set(CMAKE_C_STANDARD 11) # request C11
|
||||
set(CMAKE_C_STANDARD_REQUIRED ON) # enforce requested standard
|
||||
set(CMAKE_C_EXTENSIONS OFF) # disable compiler specific extensions
|
||||
|
||||
# configure C++17
|
||||
set(CMAKE_CXX_STANDARD 17) # request C++17
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON) # enforce requested standard
|
||||
set(CMAKE_CXX_EXTENSIONS OFF) # disable compiler specific extensions
|
||||
|
||||
# helper function to simplify definition of projects
|
||||
function(target name)
|
||||
file(GLOB_RECURSE SRC "${name}/*") # recursively collect all files in sub-folder for project
|
||||
add_executable(${name} ${SRC}) # define project "name" based on files found in SRC
|
||||
|
||||
#set required warning flags
|
||||
if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
|
||||
"${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
target_compile_options(${name} PRIVATE
|
||||
-Wall # enable "all" warnings
|
||||
-Wextra # enable extra warnings
|
||||
-Wpedantic # enable strict conformance warnings
|
||||
-Wconversion # enable warnings for dangerous implicit conversions
|
||||
-Werror=vla # disable support for VLAs
|
||||
)
|
||||
target_link_libraries(${name} PRIVATE
|
||||
m # math library must be explicitly linked on Unix
|
||||
)
|
||||
elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
target_compile_options(${name} PRIVATE
|
||||
/W4 # enable almost all "necessary" warnings
|
||||
/permissive- # enforce strict standard compliance
|
||||
/JMC # optimize debugging experience
|
||||
/MP # enable parallel compilation
|
||||
)
|
||||
else()
|
||||
message(WARNING "unknown compiler, no warning flags set!")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
target(Engine) # Foldername of the source code
|
Loading…
Reference in New Issue
Block a user