diff options
author | Josef Angstenberger <code@jtxa.de> | 2021-06-10 21:03:40 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2021-06-17 15:53:55 (GMT) |
commit | d1c3e7e78af0b3a4a5637e2bf3af86cfa5ba6e6f (patch) | |
tree | 3b56495e87f31dcade321ea33ab81b74636cf8e0 /Help/guide/tutorial/Adding System Introspection.rst | |
parent | 13fdb263231598df2cec0fb7bc9515f1f56b5577 (diff) | |
download | CMake-d1c3e7e78af0b3a4a5637e2bf3af86cfa5ba6e6f.zip CMake-d1c3e7e78af0b3a4a5637e2bf3af86cfa5ba6e6f.tar.gz CMake-d1c3e7e78af0b3a4a5637e2bf3af86cfa5ba6e6f.tar.bz2 |
Tutorial: Split steps into separate files
Fixes: #21737
Diffstat (limited to 'Help/guide/tutorial/Adding System Introspection.rst')
-rw-r--r-- | Help/guide/tutorial/Adding System Introspection.rst | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/Help/guide/tutorial/Adding System Introspection.rst b/Help/guide/tutorial/Adding System Introspection.rst new file mode 100644 index 0000000..0ee360c --- /dev/null +++ b/Help/guide/tutorial/Adding System Introspection.rst @@ -0,0 +1,50 @@ +Step 5: Adding System Introspection +=================================== + +Let us consider adding some code to our project that depends on features the +target platform may not have. For this example, we will add some code that +depends on whether or not the target platform has the ``log`` and ``exp`` +functions. Of course almost every platform has these functions but for this +tutorial assume that they are not common. + +If the platform has ``log`` and ``exp`` then we will use them to compute the +square root in the ``mysqrt`` function. We first test for the availability of +these functions using the :module:`CheckSymbolExists` module in +``MathFunctions/CMakeLists.txt``. On some platforms, we will need to link to +the m library. If ``log`` and ``exp`` are not initially found, require the m +library and try again. + +.. literalinclude:: Step6/MathFunctions/CMakeLists.txt + :language: cmake + :start-after: # does this system provide the log and exp functions? + :end-before: # add compile definitions + +If available, use :command:`target_compile_definitions` to specify +``HAVE_LOG`` and ``HAVE_EXP`` as ``PRIVATE`` compile definitions. + +.. literalinclude:: Step6/MathFunctions/CMakeLists.txt + :language: cmake + :start-after: # add compile definitions + :end-before: # install rules + +If ``log`` and ``exp`` are available on the system, then we will use them to +compute the square root in the ``mysqrt`` function. Add the following code to +the ``mysqrt`` function in ``MathFunctions/mysqrt.cxx`` (don't forget the +``#endif`` before returning the result!): + +.. literalinclude:: Step6/MathFunctions/mysqrt.cxx + :language: c++ + :start-after: // if we have both log and exp then use them + :end-before: // do ten iterations + +We will also need to modify ``mysqrt.cxx`` to include ``cmath``. + +.. literalinclude:: Step6/MathFunctions/mysqrt.cxx + :language: c++ + :end-before: #include <iostream> + +Run the :manual:`cmake <cmake(1)>` executable or the +:manual:`cmake-gui <cmake-gui(1)>` to configure the project and then build it +with your chosen build tool and run the Tutorial executable. + +Which function gives better results now, sqrt or mysqrt? |