cmake_minimum_required(VERSION 3.10) option(A_BUILD_MAIN_AS_STATIC_LIB "Build as a static library instead of an executable" OFF) get_filename_component(TARGET_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME) set(MAIN_SRCS main.c ) if(A_BUILD_MAIN_AS_STATIC_LIB) add_library(${TARGET_NAME} STATIC ${MAIN_SRCS}) else() add_executable(${TARGET_NAME} ${MAIN_SRCS}) endif() if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_compile_definitions(${TARGET_NAME} PRIVATE DEBUG) endif() if(A_BUILD_MAIN_AS_STATIC_LIB) set_target_properties(${TARGET_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/output ) else() set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/output ) endif() target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ) if(DEFINED GLOBAL_ENABLED_MODULES AND NOT GLOBAL_ENABLED_MODULES STREQUAL "") message(STATUS "[Main] Linking modules: ${GLOBAL_ENABLED_MODULES}") target_link_libraries(${TARGET_NAME} PUBLIC ${GLOBAL_ENABLED_MODULES}) else() message(STATUS "[Main] No additional modules linked.") endif() if(DEFINED GLOBAL_ENABLED_MACROS AND NOT GLOBAL_ENABLED_MACROS STREQUAL "") message(STATUS "[Main] Defining macros: ${GLOBAL_ENABLED_MACROS}") target_compile_definitions(${TARGET_NAME} PRIVATE ${GLOBAL_ENABLED_MACROS}) endif() target_compile_options(${TARGET_NAME} PRIVATE -Wall $<$:-g -O0> $<$:-O2> )