|
22 | 22 |
|
23 | 23 | ### [Chapter 1: From a Simple Executable to Libraries](chapter-01/README.md) |
24 | 24 |
|
25 | | -- [Compiling a single source file into an executable](chapter-01/recipe-01/README.md) |
26 | | -- [Switching generators](chapter-01/recipe-02/README.md) |
27 | | -- [Building and linking static and shared libraries](chapter-01/recipe-03/README.md) |
28 | | -- [Controlling compilation with conditionals](chapter-01/recipe-04/README.md) |
29 | | -- [Presenting options to the user](chapter-01/recipe-05/README.md) |
30 | | -- [Specifying the compiler](chapter-01/recipe-06/README.md) |
31 | | -- [Switching the build type](chapter-01/recipe-07/README.md) |
32 | | -- [Controlling compiler flags](chapter-01/recipe-08/README.md) |
33 | | -- [Setting the standard for the language](chapter-01/recipe-09/README.md) |
34 | | -- [Using control flow constructs](chapter-01/recipe-10/README.md) |
| 25 | +- [1. Compiling a single source file into an executable](chapter-01/recipe-01/README.md) |
| 26 | +- [2. Switching generators](chapter-01/recipe-02/README.md) |
| 27 | +- [3. Building and linking static and shared libraries](chapter-01/recipe-03/README.md) |
| 28 | +- [4. Controlling compilation with conditionals](chapter-01/recipe-04/README.md) |
| 29 | +- [5. Presenting options to the user](chapter-01/recipe-05/README.md) |
| 30 | +- [6. Specifying the compiler](chapter-01/recipe-06/README.md) |
| 31 | +- [7. Switching the build type](chapter-01/recipe-07/README.md) |
| 32 | +- [8. Controlling compiler flags](chapter-01/recipe-08/README.md) |
| 33 | +- [9. Setting the standard for the language](chapter-01/recipe-09/README.md) |
| 34 | +- [10. Using control flow constructs](chapter-01/recipe-10/README.md) |
35 | 35 |
|
36 | 36 |
|
37 | 37 | ### [Chapter 2: Detecting the Environment](chapter-02/README.md) |
38 | 38 |
|
39 | | -- [Discovering the operating system](chapter-02/recipe-01/README.md) |
40 | | -- [Dealing with platform-dependent source code](chapter-02/recipe-02/README.md) |
41 | | -- [Dealing with compiler-dependent source code](chapter-02/recipe-03/README.md) |
42 | | -- [Discovering the host processor architecture](chapter-02/recipe-04/README.md) |
43 | | -- [Discovering the host processor instruction set](chapter-02/recipe-05/README.md) |
44 | | -- [Enabling vectorization for the Eigen library](chapter-02/recipe-06/README.md) |
| 39 | +- [1. Discovering the operating system](chapter-02/recipe-01/README.md) |
| 40 | +- [2. Dealing with platform-dependent source code](chapter-02/recipe-02/README.md) |
| 41 | +- [3. Dealing with compiler-dependent source code](chapter-02/recipe-03/README.md) |
| 42 | +- [4. Discovering the host processor architecture](chapter-02/recipe-04/README.md) |
| 43 | +- [5. Discovering the host processor instruction set](chapter-02/recipe-05/README.md) |
| 44 | +- [6. Enabling vectorization for the Eigen library](chapter-02/recipe-06/README.md) |
45 | 45 |
|
46 | 46 |
|
47 | 47 | ### [Chapter 3: Detecting External Libraries and Programs](chapter-03/README.md) |
48 | 48 |
|
49 | | -- [Detecting the Python interpreter](chapter-03/recipe-01/README.md) |
50 | | -- [Detecting the Python library](chapter-03/recipe-02/README.md) |
51 | | -- [Detecting Python modules and packages](chapter-03/recipe-03/README.md) |
52 | | -- [Detecting the BLAS and LAPACK math libraries](chapter-03/recipe-04/README.md) |
53 | | -- [Detecting the OpenMP parallel environment](chapter-03/recipe-05/README.md) |
54 | | -- [Detecting the MPI parallel environment](chapter-03/recipe-06/README.md) |
55 | | -- [Detecting the Eigen library](chapter-03/recipe-07/README.md) |
56 | | -- [Detecting the Boost libraries](chapter-03/recipe-08/README.md) |
57 | | -- [Detecting external libraries: I. Using pkg-config](chapter-03/recipe-09/README.md) |
58 | | -- [Detecting external libraries: II. Writing a find-module](chapter-03/recipe-10/README.md) |
| 49 | +- [1. Detecting the Python interpreter](chapter-03/recipe-01/README.md) |
| 50 | +- [2. Detecting the Python library](chapter-03/recipe-02/README.md) |
| 51 | +- [3. Detecting Python modules and packages](chapter-03/recipe-03/README.md) |
| 52 | +- [4. Detecting the BLAS and LAPACK math libraries](chapter-03/recipe-04/README.md) |
| 53 | +- [5. Detecting the OpenMP parallel environment](chapter-03/recipe-05/README.md) |
| 54 | +- [6. Detecting the MPI parallel environment](chapter-03/recipe-06/README.md) |
| 55 | +- [7. Detecting the Eigen library](chapter-03/recipe-07/README.md) |
| 56 | +- [8. Detecting the Boost libraries](chapter-03/recipe-08/README.md) |
| 57 | +- [9. Detecting external libraries: I. Using pkg-config](chapter-03/recipe-09/README.md) |
| 58 | +- [10. Detecting external libraries: II. Writing a find-module](chapter-03/recipe-10/README.md) |
59 | 59 |
|
60 | 60 |
|
61 | 61 | ### [Chapter 4: Creating and Running Tests](chapter-04/README.md) |
62 | 62 |
|
63 | | -- [Creating a simple unit test example](chapter-04/recipe-01/README.md) |
64 | | -- [Define a unit test using the Catch2 library](chapter-04/recipe-02/README.md) |
65 | | -- [Define a unit test and link against Google test](chapter-04/recipe-03/README.md) |
66 | | -- [Define a unit test and link against Boost test](chapter-04/recipe-04/README.md) |
67 | | -- [Dynamic analysis to detect memory defects](chapter-04/recipe-05/README.md) |
68 | | -- [Testing expected failures](chapter-04/recipe-06/README.md) |
69 | | -- [Using timeouts for long tests](chapter-04/recipe-07/README.md) |
70 | | -- [Running tests in parallel](chapter-04/recipe-08/README.md) |
71 | | -- [Running a subset of tests](chapter-04/recipe-09/README.md) |
72 | | -- [Using test fixtures](chapter-04/recipe-10/README.md) |
| 63 | +- [1. Creating a simple unit test example](chapter-04/recipe-01/README.md) |
| 64 | +- [2. Define a unit test using the Catch2 library](chapter-04/recipe-02/README.md) |
| 65 | +- [3. Define a unit test and link against Google test](chapter-04/recipe-03/README.md) |
| 66 | +- [4. Define a unit test and link against Boost test](chapter-04/recipe-04/README.md) |
| 67 | +- [5. Dynamic analysis to detect memory defects](chapter-04/recipe-05/README.md) |
| 68 | +- [6. Testing expected failures](chapter-04/recipe-06/README.md) |
| 69 | +- [7. Using timeouts for long tests](chapter-04/recipe-07/README.md) |
| 70 | +- [8. Running tests in parallel](chapter-04/recipe-08/README.md) |
| 71 | +- [9. Running a subset of tests](chapter-04/recipe-09/README.md) |
| 72 | +- [10. Using test fixtures](chapter-04/recipe-10/README.md) |
73 | 73 |
|
74 | 74 |
|
75 | 75 | ### [Chapter 5: Configure-time and Build-time Operations](chapter-05/README.md) |
76 | 76 |
|
77 | | -- [Using platform-independent file operations](chapter-05/recipe-01/README.md) |
78 | | -- [Running a custom command at configure-time](chapter-05/recipe-02/README.md) |
79 | | -- [Running a custom command at build-time I](chapter-05/recipe-03/README.md) |
80 | | -- [Running a custom command at build-time II](chapter-05/recipe-04/README.md) |
81 | | -- [Running custom commands for specific targets at build-time](chapter-05/recipe-05/README.md) |
82 | | -- [Probing compilation and linking](chapter-05/recipe-06/README.md) |
83 | | -- [Probing compiler flags](chapter-05/recipe-07/README.md) |
84 | | -- [Probing execution](chapter-05/recipe-08/README.md) |
85 | | -- [Fine-tuning configuration and compilation with generator expressions](chapter-05/recipe-09/README.md) |
| 77 | +- [1. Using platform-independent file operations](chapter-05/recipe-01/README.md) |
| 78 | +- [2. Running a custom command at configure-time](chapter-05/recipe-02/README.md) |
| 79 | +- [3. Running a custom command at build-time I](chapter-05/recipe-03/README.md) |
| 80 | +- [4. Running a custom command at build-time II](chapter-05/recipe-04/README.md) |
| 81 | +- [5. Running custom commands for specific targets at build-time](chapter-05/recipe-05/README.md) |
| 82 | +- [6. Probing compilation and linking](chapter-05/recipe-06/README.md) |
| 83 | +- [7. Probing compiler flags](chapter-05/recipe-07/README.md) |
| 84 | +- [8. Probing execution](chapter-05/recipe-08/README.md) |
| 85 | +- [9. Fine-tuning configuration and compilation with generator expressions](chapter-05/recipe-09/README.md) |
86 | 86 |
|
87 | 87 |
|
88 | 88 | ### [Chapter 6: Generating Source Code](chapter-06/README.md) |
89 | 89 |
|
90 | | -- [Generating sources at configure-time](chapter-06/recipe-01/README.md) |
91 | | -- [Generating source code at configure-time using Python](chapter-06/recipe-02/README.md) |
92 | | -- [Generating source code at build-time using Python](chapter-06/recipe-03/README.md) |
93 | | -- [Recording the project version information for reproducibility](chapter-06/recipe-04/README.md) |
94 | | -- [Recording the project version from a file](chapter-06/recipe-05/README.md) |
95 | | -- [Recording the Git hash at configure-time](chapter-06/recipe-06/README.md) |
96 | | -- [Recording the Git hash at build-time](chapter-06/recipe-07/README.md) |
| 90 | +- [1. Generating sources at configure-time](chapter-06/recipe-01/README.md) |
| 91 | +- [2. Generating source code at configure-time using Python](chapter-06/recipe-02/README.md) |
| 92 | +- [3. Generating source code at build-time using Python](chapter-06/recipe-03/README.md) |
| 93 | +- [4. Recording the project version information for reproducibility](chapter-06/recipe-04/README.md) |
| 94 | +- [5. Recording the project version from a file](chapter-06/recipe-05/README.md) |
| 95 | +- [6. Recording the Git hash at configure-time](chapter-06/recipe-06/README.md) |
| 96 | +- [7. Recording the Git hash at build-time](chapter-06/recipe-07/README.md) |
97 | 97 |
|
98 | 98 |
|
99 | 99 | ### [Chapter 7: Structuring Projects](chapter-07/README.md) |
100 | 100 |
|
101 | | -- [Code reuse with functions and macros](chapter-07/recipe-01/README.md) |
102 | | -- [Splitting CMake sources into modules](chapter-07/recipe-02/README.md) |
103 | | -- [Writing a function to test and set compiler flags](chapter-07/recipe-03/README.md) |
104 | | -- [Defining a function or macro with named arguments](chapter-07/recipe-04/README.md) |
105 | | -- [Redefining functions and macros](chapter-07/recipe-05/README.md) |
106 | | -- [Deprecating functions, macros, and variables](chapter-07/recipe-06/README.md) |
107 | | -- [Limiting scope with add_subdirectory](chapter-07/recipe-07/README.md) |
108 | | -- [Avoiding global variables using target_sources](chapter-07/recipe-08/README.md) |
109 | | -- [Organizing Fortran projects](chapter-07/recipe-09/README.md) |
| 101 | +- [1. Code reuse with functions and macros](chapter-07/recipe-01/README.md) |
| 102 | +- [2. Splitting CMake sources into modules](chapter-07/recipe-02/README.md) |
| 103 | +- [3. Writing a function to test and set compiler flags](chapter-07/recipe-03/README.md) |
| 104 | +- [4. Defining a function or macro with named arguments](chapter-07/recipe-04/README.md) |
| 105 | +- [5. Redefining functions and macros](chapter-07/recipe-05/README.md) |
| 106 | +- [6. Deprecating functions, macros, and variables](chapter-07/recipe-06/README.md) |
| 107 | +- [7. Limiting scope with add_subdirectory](chapter-07/recipe-07/README.md) |
| 108 | +- [8. Avoiding global variables using target_sources](chapter-07/recipe-08/README.md) |
| 109 | +- [9. Organizing Fortran projects](chapter-07/recipe-09/README.md) |
110 | 110 |
|
111 | 111 |
|
112 | 112 | ### [Chapter 8: The Superbuild Pattern](chapter-08/README.md) |
113 | 113 |
|
114 | | -- [Using the superbuild pattern](chapter-08/recipe-01/README.md) |
115 | | -- [Managing dependencies with a superbuild I. The Boost libraries](chapter-08/recipe-02/README.md) |
116 | | -- [Managing dependencies with a superbuild II. The FFTW library](chapter-08/recipe-03/README.md) |
117 | | -- [Managing dependencies with a superbuild III. The Google test framework](chapter-08/recipe-04/README.md) |
118 | | -- [Managing your project as a superbuild](chapter-08/recipe-05/README.md) |
| 114 | +- [1. Using the superbuild pattern](chapter-08/recipe-01/README.md) |
| 115 | +- [2. Managing dependencies with a superbuild I. The Boost libraries](chapter-08/recipe-02/README.md) |
| 116 | +- [3. Managing dependencies with a superbuild II. The FFTW library](chapter-08/recipe-03/README.md) |
| 117 | +- [4. Managing dependencies with a superbuild III. The Google test framework](chapter-08/recipe-04/README.md) |
| 118 | +- [5. Managing your project as a superbuild](chapter-08/recipe-05/README.md) |
119 | 119 |
|
120 | 120 |
|
121 | 121 | ### [Chapter 9: Mixed-language Projects](chapter-09/README.md) |
122 | 122 |
|
123 | | -- [Building Fortran projects that use C/C++ libraries](chapter-09/recipe-01/README.md) |
124 | | -- [Building C/C++ projects that use Fortran libraries](chapter-09/recipe-02/README.md) |
125 | | -- [Building C++ and Python projects using Cython](chapter-09/recipe-03/README.md) |
126 | | -- [Building C++ and Python projects using Boost.Python](chapter-09/recipe-04/README.md) |
127 | | -- [Building C++ and Python projects using pybind11](chapter-09/recipe-05/README.md) |
128 | | -- [Mixing C, C++, Fortran, and Python using Python CFFI](chapter-09/recipe-06/README.md) |
| 123 | +- [1. Building Fortran projects that use C/C++ libraries](chapter-09/recipe-01/README.md) |
| 124 | +- [2. Building C/C++ projects that use Fortran libraries](chapter-09/recipe-02/README.md) |
| 125 | +- [3. Building C++ and Python projects using Cython](chapter-09/recipe-03/README.md) |
| 126 | +- [4. Building C++ and Python projects using Boost.Python](chapter-09/recipe-04/README.md) |
| 127 | +- [5. Building C++ and Python projects using pybind11](chapter-09/recipe-05/README.md) |
| 128 | +- [6. Mixing C, C++, Fortran, and Python using Python CFFI](chapter-09/recipe-06/README.md) |
129 | 129 |
|
130 | 130 |
|
131 | 131 | ### [Chapter 10: Writing an Installer](chapter-10/README.md) |
132 | 132 |
|
133 | | -- [Installing your project](chapter-10/recipe-01/README.md) |
134 | | -- [Generating export headers](chapter-10/recipe-02/README.md) |
135 | | -- [Exporting your targets](chapter-10/recipe-03/README.md) |
136 | | -- [Installing a superbuild](chapter-10/recipe-04/README.md) |
| 133 | +- [1. Installing your project](chapter-10/recipe-01/README.md) |
| 134 | +- [2. Generating export headers](chapter-10/recipe-02/README.md) |
| 135 | +- [3. Exporting your targets](chapter-10/recipe-03/README.md) |
| 136 | +- [4. Installing a superbuild](chapter-10/recipe-04/README.md) |
137 | 137 |
|
138 | 138 |
|
139 | 139 | ### [Chapter 11: Packaging Projects](chapter-11/README.md) |
140 | 140 |
|
141 | | -- [Generating source and binary packages](chapter-11/recipe-01/README.md) |
142 | | -- [Distributing a C++/Python project built with CMake/pybind11 via PyPI](chapter-11/recipe-02/README.md) |
143 | | -- [Distributing a C/Fortran/Python project built with CMake/CFFI via PyPI](chapter-11/recipe-03/README.md) |
144 | | -- [Distributing a simple project as Conda package](chapter-11/recipe-04/README.md) |
145 | | -- [Distributing a project with dependencies as Conda package](chapter-11/recipe-05/README.md) |
| 141 | +- [1. Generating source and binary packages](chapter-11/recipe-01/README.md) |
| 142 | +- [2. Distributing a C++/Python project built with CMake/pybind11 via PyPI](chapter-11/recipe-02/README.md) |
| 143 | +- [3. Distributing a C/Fortran/Python project built with CMake/CFFI via PyPI](chapter-11/recipe-03/README.md) |
| 144 | +- [4. Distributing a simple project as Conda package](chapter-11/recipe-04/README.md) |
| 145 | +- [5. Distributing a project with dependencies as Conda package](chapter-11/recipe-05/README.md) |
146 | 146 |
|
147 | 147 |
|
148 | 148 | ### [Chapter 12: Building Documentation](chapter-12/README.md) |
149 | 149 |
|
150 | | -- [Building documentation using Doxygen](chapter-12/recipe-01/README.md) |
151 | | -- [Building documentation using Sphinx](chapter-12/recipe-02/README.md) |
152 | | -- [Combining Doxygen and Sphinx](chapter-12/recipe-03/README.md) |
| 150 | +- [1. Building documentation using Doxygen](chapter-12/recipe-01/README.md) |
| 151 | +- [2. Building documentation using Sphinx](chapter-12/recipe-02/README.md) |
| 152 | +- [3. Combining Doxygen and Sphinx](chapter-12/recipe-03/README.md) |
153 | 153 |
|
154 | 154 |
|
155 | 155 | ### [Chapter 13: Alternative Generators and Cross-compilation](chapter-13/README.md) |
156 | 156 |
|
157 | | -- [Cross-compiling a hello world example](chapter-13/recipe-01/README.md) |
158 | | -- [Cross-compiling a Windows binary with OpenMP parallelization](chapter-13/recipe-02/README.md) |
| 157 | +- [1. Cross-compiling a hello world example](chapter-13/recipe-01/README.md) |
| 158 | +- [2. Cross-compiling a Windows binary with OpenMP parallelization](chapter-13/recipe-02/README.md) |
159 | 159 |
|
160 | 160 |
|
161 | 161 | ### [Chapter 14: Testing Dashboards](chapter-14/README.md) |
162 | 162 |
|
163 | | -- [Deploying tests to the CDash dashboard](chapter-14/recipe-01/README.md) |
164 | | -- [Reporting test coverage to the CDash dashboard](chapter-14/recipe-02/README.md) |
165 | | -- [Using the AddressSanitizer and reporting memory defects to CDash](chapter-14/recipe-03/README.md) |
166 | | -- [Using the ThreadSanitizer and reporting data races to CDash](chapter-14/recipe-04/README.md) |
| 163 | +- [1. Deploying tests to the CDash dashboard](chapter-14/recipe-01/README.md) |
| 164 | +- [2. Reporting test coverage to the CDash dashboard](chapter-14/recipe-02/README.md) |
| 165 | +- [3. Using the AddressSanitizer and reporting memory defects to CDash](chapter-14/recipe-03/README.md) |
| 166 | +- [4. Using the ThreadSanitizer and reporting data races to CDash](chapter-14/recipe-04/README.md) |
167 | 167 |
|
168 | 168 |
|
169 | 169 | ### [Chapter 15: Porting a Project to CMake](chapter-15/README.md) |
0 commit comments