
Propagate the refactor in Step 10 MathFunctions through all of the steps. Use MathFunctions/MathFunctions.cxx instead of Tutorial.cxx to determine which sqrt library is called. Adds .h files which correspond to their .cxx files by name.
72 lines
2.1 KiB
CMake
72 lines
2.1 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
|
|
|
# set the project name and version
|
|
project(Tutorial VERSION 1.0)
|
|
|
|
# specify the C++ standard
|
|
add_library(tutorial_compiler_flags INTERFACE)
|
|
target_compile_features(tutorial_compiler_flags INTERFACE cxx_std_11)
|
|
|
|
# add compiler warning flags just when building this project via
|
|
# the BUILD_INTERFACE genex
|
|
set(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>>"
|
|
)
|
|
|
|
# configure a header file to pass some of the CMake settings
|
|
# to the source code
|
|
configure_file(TutorialConfig.h.in TutorialConfig.h)
|
|
|
|
# add the MathFunctions library
|
|
add_subdirectory(MathFunctions)
|
|
|
|
# add the executable
|
|
add_executable(Tutorial tutorial.cxx)
|
|
|
|
target_link_libraries(Tutorial PUBLIC MathFunctions tutorial_compiler_flags)
|
|
|
|
# add the binary tree to the search path for include files
|
|
# so that we will find TutorialConfig.h
|
|
target_include_directories(Tutorial PUBLIC
|
|
"${PROJECT_BINARY_DIR}"
|
|
)
|
|
|
|
# add the install targets
|
|
install(TARGETS Tutorial DESTINATION bin)
|
|
install(FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"
|
|
DESTINATION include
|
|
)
|
|
|
|
# TODO 1: Replace enable_testing() with include(CTest)
|
|
# enable testing
|
|
enable_testing()
|
|
|
|
# does the application run
|
|
add_test(NAME Runs COMMAND Tutorial 25)
|
|
|
|
# does the usage message work?
|
|
add_test(NAME Usage COMMAND Tutorial)
|
|
set_tests_properties(Usage
|
|
PROPERTIES PASS_REGULAR_EXPRESSION "Usage:.*number"
|
|
)
|
|
|
|
# define a function to simplify adding tests
|
|
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 a bunch of result based tests
|
|
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")
|