summaryrefslogblamecommitdiffstats
path: root/02_exercise/CMakeLists.txt
blob: c2fa8d53b58416b30b474ce46feb89cf9cefb03f (plain) (tree)













































                                                                                  
cmake_minimum_required(VERSION 3.5)

project(shell)

add_executable(shell shell.c)
target_link_libraries(shell PRIVATE array prompt_utils)
add_compile_definitions(_GNU_SOURCE)

add_library(array array.c)

add_library(prompt_utils prompt_utils.c)
target_link_libraries(prompt_utils PRIVATE array)

set(CMAKE_C_STANDARD gnu11)
set(CMAKE_C_STANDARD_REQUIRED True)
set(CLANG_WARNINGS
        -Wall
        -Wextra # reasonable and standard
        -Wshadow # warn the user if a variable declaration shadows one from a
        # parent context
        -Wcast-align # warn for potential performance problem casts
        -Wunused # warn on anything being unused
        -Woverloaded-virtual # warn if you overload (not override) a virtual
        # function
        -Wpedantic # warn if non-standard C++ is used
        -Wconversion # warn on type conversions that may lose data
        -Wsign-conversion # warn on sign conversions
        -Wnull-dereference # warn if a null dereference is detected
        -Wdouble-promotion # warn if float is implicit promoted to double
        -Wformat=2 # warn on security issues around functions that format output
        # (ie printf)
        -Werror
        )
set(GCC_WARNINGS
        ${CLANG_WARNINGS}
        -Wmisleading-indentation # warn if indentation implies blocks where blocks
        # do not exist
        -Wduplicated-cond # warn if if / else chain has duplicated conditions
        -Wduplicated-branches # warn if if / else branches have duplicated code
        -Wlogical-op # warn about logical operations being used where bitwise were
        # probably wanted
        -Wuseless-cast # warn if you perform a cast to the same type
        )
set(PROJECT_WARNINGS ${CLANG_WARNINGS})
target_compile_options(shell INTERFACE ${PROJECT_WARNINGS})
target_compile_options(prompt_utils INTERFACE ${PROJECT_WARNINGS})