💿🐜 Antkeeper source code https://antkeeper.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.9 KiB

5 years ago
5 years ago
5 years ago
  1. # Prevent in-source builds
  2. if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
  3. message(FATAL_ERROR "In-source builds prohibited. Call cmake from the build directory.")
  4. endif()
  5. cmake_minimum_required(VERSION 3.7)
  6. # Set compiler flags
  7. if(CMAKE_COMPILER_IS_GNUCC)
  8. set(CMAKE_CXX_FLAGS "-Wall -Wextra")
  9. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -g")
  10. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -O3")
  11. elseif(MSVC)
  12. set(CMAKE_CXX_FLAGS "/W3 /MP /MD")
  13. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS}")
  14. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} /Ox")
  15. endif()
  16. # Include project macro
  17. include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/project.cmake)
  18. # Find dependency packages
  19. find_package(emergent REQUIRED CONFIG)
  20. find_package(OpenAL REQUIRED CONFIG)
  21. # Determine dependencies
  22. set(STATIC_LIBS
  23. emergent
  24. OpenAL::OpenAL)
  25. # Generate configuration header file
  26. configure_file(${PROJECT_SOURCE_DIR}/src/configuration.hpp.in
  27. ${PROJECT_BINARY_DIR}/src/configuration.hpp)
  28. # Collect source files
  29. file(GLOB_RECURSE SOURCE_FILES
  30. ${PROJECT_SOURCE_DIR}/src/*.cpp)
  31. # Add executable target
  32. set(EXECUTABLE_TARGET ${PROJECT_NAME}-executable)
  33. add_executable(${EXECUTABLE_TARGET} ${SOURCE_FILES})
  34. set_target_properties(${EXECUTABLE_TARGET} PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
  35. # Set link flags to show console window on debug builds and hide it on release builds
  36. if(MSVC)
  37. set_target_properties(${EXECUTABLE_TARGET} PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
  38. set_target_properties(${EXECUTABLE_TARGET} PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS /ENTRY:\"mainCRTStartup\"")
  39. endif(MSVC)
  40. # Set include directories
  41. target_include_directories(${EXECUTABLE_TARGET}
  42. PUBLIC
  43. ${PROJECT_SOURCE_DIR}/src
  44. ${PROJECT_BINARY_DIR}/src)
  45. # Link to dependencies
  46. target_link_libraries(${EXECUTABLE_TARGET} ${STATIC_LIBS})
  47. # Install executable
  48. install(TARGETS ${EXECUTABLE_TARGET} DESTINATION bin)