added cmake
This commit is contained in:
		
							
								
								
									
										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 | ||||
		Reference in New Issue
	
	Block a user