cmake_minimum_required(VERSION 3.17) # set the project name set(PROJECT_NAME ICT290) set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) project(${PROJECT_NAME} VERSION 0.1.0 LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 17) # create bin directory set(directory ${CMAKE_BINARY_DIR}/bin) file(MAKE_DIRECTORY ${directory}) enable_testing() # add associated directory for main executable add_subdirectory(src) # add associated directory for tests executable add_subdirectory(test) # Add executable add_executable(${CMAKE_PROJECT_NAME} ${SOURCES}) # Create library (needed to make code accessible to tests) add_library(${CMAKE_PROJECT_NAME}_lib SHARED STATIC ${SOURCES}) # Build libs add_subdirectory(lib) # add resources directory to copy files to binary dir add_subdirectory(res) IF (WIN32) set_target_properties(SDL2 PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) ELSEIF (UNIX OR APPLE) set(MY_TARGET_LIBS -lm -ldl -lm -ldl -lX11 -lXrandr -lXi -lstdc++ -lGL -lSDL2 # link libs from system on unix ) target_link_libraries(${PROJECT_NAME} PUBLIC ${MY_TARGET_LIBS}) target_link_libraries(${PROJECT_NAME}_lib PUBLIC ${MY_TARGET_LIBS}) ENDIF () set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # view cmake dependency tree #set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_DEBUG_MODE 1) #Ignore MSVC CRT Secure warnings if (MSVC) add_definitions(-D_CRT_SECURE_NO_WARNINGS) endif () # Set compile options target_compile_options(${PROJECT_NAME} PRIVATE # Clang and AppleClang $<$,$>,$>: -Wall -Wextra -Wno-error=deprecated-declarations -march=native -fsanitize=address,undefined,leak> $<$,$>,$>>: -Wall -Wextra -Wno-error=deprecated-declarations> $<$,$>: -v -Wall -Wextra -Wno-error=deprecated-declarations> # GNU GCC/G++ $<$,$>,$>: -Wall -Wextra -pedantic -fsanitize=address,leak> $<$,$>,$>>: -Wall -Wextra -pedantic> $<$,$>: -Wall -Wextra -pedantic> # MSVC, /wd4201 ignore nameless struct/union for glm $<$,$>,$>: /W4 /wd4201 /fsanitize=address> $<$,$>,$>>: /W4 /wd4201> $<$,$>: /W4 /wd4201> ) target_link_options(${PROJECT_NAME} PRIVATE # Clang and AppleClang $<$,$>,$>: -fsanitize=address,undefined,leak> # GNU GCC/G++ $<$,$>,$>: -fsanitize=address,leak> # MSVC $<$,$>,$>: /INFERASANLIBS /WHOLEARCHIVE /DEBUG> $<$:/SubSystem:console> ) # Doxygen and graphiz find_package(Doxygen) if (DOXYGEN_FOUND) set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile) add_custom_target(doc ALL COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_IN} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src COMMENT "Generating API documentation with Doxygen" VERBATIM) endif () # Create shortcut to executable message("-- Creating shortcut to binary") if (WIN32) if (NOT EXISTS ${PROJECT_NAME}.exe) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND mklink ICT290.exe bin\\${PROJECT_NAME}.exe ) endif () elseif (UNIX OR APPLE) if (NOT EXISTS ${PROJECT_NAME}) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ln -s bin/${PROJECT_NAME} ) endif () endif ()