cmake_minimum_required(VERSION 3.5) project(shell C) set(CMAKE_C_COMPILER gcc) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED True) add_executable(prog prog.c) add_executable(shell shell.c) target_link_libraries(shell PRIVATE array prompt_utils process) add_compile_definitions(_GNU_SOURCE) add_library(array array.c) add_library(prompt_utils prompt_utils.c) target_link_libraries(prompt_utils PRIVATE array) add_executable(prompt_utils_test prompt_utils_test.c) target_link_libraries(prompt_utils_test PRIVATE prompt_utils array) add_library(process process.c) target_link_libraries(process PRIVATE array) add_executable(process_test process_test.c) target_link_libraries(process_test PRIVATE process) 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 -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 ) set(PROJECT_WARNINGS ${GCC_WARNINGS}) target_compile_options(shell INTERFACE ${PROJECT_WARNINGS}) target_compile_options(prompt_utils INTERFACE ${PROJECT_WARNINGS})