cmake_minimum_required(VERSION 3.15)#setthe project name and versionproject(Tutorial VERSION 1.0)#specifythe C++ standardadd_library(tutorial_compiler_flags INTERFACE)target_compile_features(tutorial_compiler_flags INTERFACE cxx_std_11)#addcompiler warning flags just when building this project via#theBUILD_INTERFACE genexset(gcc_like_cxx "$<COMPILE_LANG_AND_ID:CXX,ARMClang,AppleClang,Clang,GNU,LCC>")set(msvc_cxx "$<COMPILE_LANG_AND_ID:CXX,MSVC>")target_compile_options(tutorial_compiler_flags INTERFACE
"$<${gcc_like_cxx}:$<BUILD_INTERFACE:-Wall;-Wextra;-Wshadow;-Wformat=2;-Wunused>>""$<${msvc_cxx}:$<BUILD_INTERFACE:-W3>>")#configurea header file to pass some of the CMake settings#tothe source codeconfigure_file(TutorialConfig.h.in TutorialConfig.h)#addthe MathFunctions libraryadd_subdirectory(MathFunctions)#addthe executableadd_executable(Tutorial tutorial.cxx)target_link_libraries(Tutorial PUBLIC MathFunctions tutorial_compiler_flags)#addthe binary tree to the search path for include files#sothat we will find TutorialConfig.htarget_include_directories(Tutorial PUBLIC
"${PROJECT_BINARY_DIR}")#TODO 3: Install Tutorial in the bin directory#Hint: Use the TARGETS and DESTINATION parametersinstall(TARGETS Tutorial DESTINATION bin)install(FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"
DESTINATION include)#TODO 5: Enable testingenable_testing()#TODO 6: Add a test called Runs which runs the following command:
# $ Tutorial 25add_test(NAME Runs COMMAND Tutorial 25)#TODO 7: Add a test called Usage which runs the following command:
# $ Tutorial
#Make sure the expected output is displayed.#Hint: Use the PASS_REGULAR_EXPRESSION property with "Usage.*number"add_test(NAME Usage COMMAND Tutorial)set_tests_properties(Usage PROPERTIES PASS_REGULAR_EXPRESSION "Usage:.*number")add_test(NAME StandardUse COMMAND Tutorial 4)set_tests_properties(StandardUse PROPERTIES PASS_REGULAR_EXPRESSION "4 is 2")#TODO 9: Add more tests. Create a function called do_test to avoid copy +#paste. Test the following values:4,9,5,7,25,-25 and 0.0001.function(do_test target arg result)add_test(NAME Comp${arg} COMMAND ${target} ${arg})set_tests_properties(Comp${arg} PROPERTIES PASS_REGULAR_EXPRESSION ${result})endfunction()do_test(Tutorial 4"4 is 2")do_test(Tutorial 9"9 is 3")do_test(Tutorial 5"5 is 2.236")do_test(Tutorial 7"7 is 2.645")do_test(Tutorial 25"25 is 5")do_test(Tutorial -25"-25 is (-nan|nan|0)")do_test(Tutorial 0.0001"0.0001 is 0.01")