summaryrefslogtreecommitdiffstats
path: root/Tests/Tutorial/Step2/directions.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/Tutorial/Step2/directions.txt')
-rw-r--r--Tests/Tutorial/Step2/directions.txt101
1 files changed, 0 insertions, 101 deletions
diff --git a/Tests/Tutorial/Step2/directions.txt b/Tests/Tutorial/Step2/directions.txt
deleted file mode 100644
index 48de7a2..0000000
--- a/Tests/Tutorial/Step2/directions.txt
+++ /dev/null
@@ -1,101 +0,0 @@
-# Adding a Library #
-
-Now we will add a library to our project. This library will contain our own
-implementation for computing the square root of a number. The executable can
-then use this library instead of the standard square root function provided by
-the compiler.
-
-For this tutorial we will put the library into a subdirectory
-called MathFunctions. It will have the following one line CMakeLists file:
-
- add_library(MathFunctions mysqrt.cxx)
-
-The source file mysqrt.cxx has one function called mysqrt that provides similar
-functionality to the compiler’s sqrt function. To make use of the new library
-we add an add_subdirectory call in the top-level CMakeLists file so that the
-library will get built. We add the new library to the executable, and add the
-MathFunctions as an include directory so that mqsqrt.h header file can be
-found. The last few lines of the top-level CMakeLists file now look like:
-
-
- add_subdirectory(MathFunctions)
-
- #add the executable
- add_executable(Tutorial tutorial.cxx)
-
- target_link_libraries(Tutorial ${EXTRA_LIBS})
-
-
-Now let us make the MathFunctions library optional. While for the tutorial
-there really isn’t any need to do so, but with larger projects this is a common
-occurrence. The first step is to add an option to the top-level CMakeLists file.
-
- option (USE_MYMATH
- "Use tutorial provided math implementation" ON)
-
-This will show up in CMake GUI and ccmake with a default value of ON that can
-be changed by the user. This setting will be stored so that the user does not
-need to set the value each time they run CMake on this build directory.
-
-The next change is to make building and linking the MathFunctions library
-conditional. To do this we change the top-level CMakeLists file to look like
-the following:
-
- cmake_minimum_required(VERSION 3.3)
- project(Tutorial)
-
- set(CMAKE_CXX_STANDARD 14)
-
- # the version number.
- set(Tutorial_VERSION_MAJOR 1)
- set(Tutorial_VERSION_MINOR 0)
-
- # configure a header file to pass some of the CMake settings
- # to the source code
- configure_file(
- "${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
- "${PROJECT_BINARY_DIR}/TutorialConfig.h"
- )
-
- # should we use our own math functions
- option(USE_MYMATH "Use tutorial provided math implementation" ON)
-
- # add the MathFunctions library?
- if(USE_MYMATH)
- add_subdirectory(MathFunctions)
- list(APPEND EXTRA_LIBS MathFunctions)
- list(APPEND EXTRA_INCLUDES "${PROJECT_SOURCE_DIR}/MathFunctions")
- endif(USE_MYMATH)
-
- # add the executable
- add_executable(Tutorial tutorial.cxx)
-
- target_link_libraries(Tutorial ${EXTRA_LIBS})
-
- # 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}"
- ${EXTRA_INCLUDES}
- )
-
-Note the use of the variables EXTRA_LIBS, and EXTRA_INCLUDES to collect
-up any optional libraries to later be linked into the executable. This is a
-classic approach when dealing with many optional components, we will cover the
-modern approach in the next step. For now the corresponding changes to the
-source code are fairly straightforward and leave us with:
-
- #ifdef USE_MYMATH
- double outputValue = mysqrt(inputValue);
- #else
- double outputValue = sqrt(inputValue);
- #endif
-
-Since the source code now requires USE_MYMATH we can add it to the
-TutorialConfig.h.in. Simply add the following line:
- #cmakedefine USE_MYMATH
-
-Run cmake or cmake-gui to configure the project and then build it with your
-chosen build tool and then run the built Tutorial executable.
-
-Which function gives better results, Step1’s sqrt or Step2’s mysqrt?