Cmake Fortran Scripts tagshttps://git.ufz.de/chs/cmake-fortran-scripts/-/tags2023-08-07T14:21:34+02:00https://git.ufz.de/chs/cmake-fortran-scripts/-/tags/v2.1v2.1v2.1<h1 data-sourcepos="1:1-1:28" dir="auto">
<a id="user-content-cmake-fortran-scripts-v21" class="anchor" href="#cmake-fortran-scripts-v21" aria-hidden="true"></a>Cmake Fortran Scripts v2.1</h1>
<p data-sourcepos="3:1-3:41" dir="auto">Cmake scripts for Fortran Projects at CHS</p>
<h2 data-sourcepos="5:1-5:16" dir="auto">
<a id="user-content-cmake-modules" class="anchor" href="#cmake-modules" aria-hidden="true"></a>Cmake Modules</h2>
<p data-sourcepos="7:1-7:90" dir="auto">These modules provide different functions and macros to be used in <code>CMakeLists.txt</code> files.</p>
<p data-sourcepos="9:1-9:130" dir="auto">To use a module, you either need to update the cmake module path (assuming these files are in a top-level folder called <code>cmake/</code>):</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="11:5-12:0" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="13:1-13:42" dir="auto">and then include the module by name, e.g.:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="15:5-16:0" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">include(CPM)</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="17:1-17:78" dir="auto">or include the module directly by path (relative to the <code>CMakeLists.txt</code> file)</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="19:5-20:0" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">include(cmake/CPM.cmake)</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="21:1-21:86" dir="auto">For package finders (e.g. YAC or NetCDF) you <strong>need</strong> to update the cmake module path.</p>
<h3 data-sourcepos="23:1-23:31" dir="auto">
<a id="user-content-fortranpreprocessorcmake" class="anchor" href="#fortranpreprocessorcmake" aria-hidden="true"></a><code>fortranpreprocessor.cmake</code>
</h3>
<p data-sourcepos="25:1-26:31" dir="auto">Draws inspiration from <a href="https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake</a> (MIT license)
to handle <code>fypp</code> pre-processor.</p>
<p data-sourcepos="28:1-28:21" dir="auto">Additional functions:</p>
<ul data-sourcepos="29:1-31:0" dir="auto">
<li data-sourcepos="29:1-29:98">
<code>get_preproc_flag</code>: checks for the pre-processor flag of the current compiler (<code>-fpp</code> or <code>-cpp</code>)</li>
<li data-sourcepos="30:1-31:0">
<code>cpp_definitions</code>: adds a compile definition and a corresponding cmake option</li>
</ul>
<p data-sourcepos="32:1-32:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="33:1-35:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>fortranpreprocessor<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="37:1-37:24" dir="auto">
<a id="user-content-codecoveragecmake" class="anchor" href="#codecoveragecmake" aria-hidden="true"></a><code>CodeCoverage.cmake</code>
</h3>
<p data-sourcepos="39:1-39:132" dir="auto">Copied from: <a href="https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake</a> (Copyright Lars Bilke, BSL 1.0 license, see file)</p>
<p data-sourcepos="41:1-41:32" dir="auto">Can be included and set up with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="42:1-51:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CodeCoverage<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">append_coverage_compiler_flags_to_target</span><span class="p">(</span>PROJECT<span class="p">)</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nf">SETUP_TARGET_FOR_COVERAGE_LCOV</span><span class="p">(</span></span>
<span id="LC4" class="line" lang="cmake"> NAME PROJECT_coverage_CI</span>
<span id="LC5" class="line" lang="cmake"> EXECUTABLE PROJECT</span>
<span id="LC6" class="line" lang="cmake"> DEPENDENCIES PROJECT</span>
<span id="LC7" class="line" lang="cmake"> GENHTML_ARGS -t <span class="s2">"PROJECT coverage"</span></span>
<span id="LC8" class="line" lang="cmake"><span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="53:1-53:26" dir="auto">
<a id="user-content-compileoptionscmake" class="anchor" href="#compileoptionscmake" aria-hidden="true"></a><code>compileoptions.cmake</code>
</h3>
<p data-sourcepos="55:1-55:26" dir="auto">Adds cmake compile options</p>
<ul data-sourcepos="56:1-63:0" dir="auto">
<li data-sourcepos="56:1-56:57">
<code>CMAKE_BUILD_MODULE_SYSTEM_INDEPENDENT</code>: setting r_path</li>
<li data-sourcepos="57:1-57:27">
<code>CMAKE_WITH_MPI</code>: use MPI</li>
<li data-sourcepos="58:1-58:33">
<code>CMAKE_WITH_OpenMP</code>: use OpenMP</li>
<li data-sourcepos="59:1-59:42">
<code>CMAKE_WITH_LAPACK</code>: use LAPACK bindings</li>
<li data-sourcepos="60:1-60:45">
<code>CMAKE_WITH_COVERAGE</code>: Coverage calculation</li>
<li data-sourcepos="61:1-61:129">
<code>CMAKE_WITH_GPROF</code>: gprof profiling information (see <a href="https://www.thegeekstuff.com/2012/08/gprof-tutorial/" rel="nofollow noreferrer noopener" target="_blank">here</a> for tutorial)</li>
<li data-sourcepos="62:1-63:0">will also search for <code>MPI</code>, <code>OpenMP</code> and <code>LAPACK</code> if the respective option is <code>ON</code>
</li>
</ul>
<p data-sourcepos="64:1-64:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="65:1-67:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>compileoptions<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="69:1-69:22" dir="auto">
<a id="user-content-findnetcdfcmake" class="anchor" href="#findnetcdfcmake" aria-hidden="true"></a><code>FindNetCDF.cmake</code>
</h3>
<p data-sourcepos="71:1-71:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="72:1-75:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">find_package</span><span class="p">(</span>NetCDF COMPONENTS Fortran<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><target> PUBLIC NetCDF::NetCDF_Fortran<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="77:1-77:43" dir="auto">To specify a particular NetCDF library, use</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="79:5-80:0" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">cmake -DNetCDF_ROOT=/path/to/netcdff -B build</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="81:1-81:59" dir="auto">or set environment variable <code>NetCDF_ROOT=/path/to/netcdff</code>.</p>
<h3 data-sourcepos="83:1-83:19" dir="auto">
<a id="user-content-findyaccmake" class="anchor" href="#findyaccmake" aria-hidden="true"></a><code>FindYAC.cmake</code>
</h3>
<p data-sourcepos="85:1-85:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="86:1-90:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">find_package</span><span class="p">(</span>YAC<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nb">target_include_directories</span><span class="p">(</span><target> PUBLIC <span class="si">${</span><span class="nv">YAC_INCLUDE_DIR</span><span class="si">}</span><span class="p">)</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><target> PUBLIC <span class="si">${</span><span class="nv">YAC_LIB</span><span class="si">}</span><span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="92:1-92:43" dir="auto">To specify a particular NetCDF library, use</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="94:5-95:0" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">cmake -DYAC_ROOT=/path/to/yac -B build</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="96:1-96:52" dir="auto">or set environment variable <code>YAC_ROOT=/path/to/yac</code>.</p>
<h3 data-sourcepos="98:1-98:20" dir="auto">
<a id="user-content-findesmfcmake" class="anchor" href="#findesmfcmake" aria-hidden="true"></a><code>FindESMF.cmake</code>
</h3>
<p data-sourcepos="100:1-100:442" dir="auto">Copied from: <a href="https://github.com/esmf-org/esmf/blob/v8.5.0/cmake/FindESMF.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/esmf-org/esmf/blob/v8.5.0/cmake/FindESMF.cmake</a> (Copyright (c) 2002-2023 University Corporation for Atmospheric Research, Massachusetts Institute of Technology, Geophysical Fluid Dynamics Laboratory, University of Michigan, National Centers for Environmental Prediction, Los Alamos National Laboratory, Argonne National Laboratory, NASA Goddard Space Flight Center. All rights reserved., NCSA license, see file)</p>
<p data-sourcepos="102:1-107:52" dir="auto">Uses <code>ESMFMKFILE</code> to find the filepath of <code>esmf.mk</code>. If this is NOT set, then this
module will attempt to find <code>esmf.mk</code>. If <code>ESMFMKFILE</code> exists, then
ESMF_FOUND=TRUE and all ESMF makefile variables will be set in the global
scope. Optionally, set ESMF_MKGLOBALS to a string list to filter makefile
variables. For example, to globally scope only ESMF_LIBSDIR and ESMF_APPSDIR
variables, use this CMake command in CMakeLists.txt:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="109:1-111:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">set</span><span class="p">(</span>ESMF_MKGLOBALS <span class="s2">"LIBSDIR"</span> <span class="s2">"APPSDIR"</span><span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="113:1-115:4" dir="auto">Set <code>ESMFMKFILE</code> as defined by system env variable. If it's not explicitly set
try to find <code>esmf.mk</code> file in default locations (<code>ESMF_ROOT</code>, <code>CMAKE_PREFIX_PATH</code>,
etc)</p>
<p data-sourcepos="117:1-117:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="118:1-121:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">find_package</span><span class="p">(</span>ESMF REQUIRED<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><target> PUBLIC ESMF<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="123:1-123:19" dir="auto">
<a id="user-content-versioncmake" class="anchor" href="#versioncmake" aria-hidden="true"></a><code>version.cmake</code>
</h3>
<p data-sourcepos="125:1-125:110" dir="auto">Provides a function to read version and date from given files <code>version.txt</code> and (optional) <code>version_date.txt</code>.</p>
<p data-sourcepos="127:1-127:87" dir="auto">Can be included and used with (<code>PROJECT_VER_DEV</code> will hold the develop version string):</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="128:1-131:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>version<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">get_version</span><span class="p">(</span>PROJECT_VER PROJECT_VER_DEV PROJECT_DATE<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="133:1-136:46" dir="auto">If a development version was found (e.g. <code>1.0.0-dev0</code>), it will try to determine the latest git commit short hash and add it (e.g. <code>1.0.0-dev0+02d7e12</code>).
If there is no <code>version_date.txt</code> file or a development version was found, the script will try to determine the latest git commit date or use the current date.
<code>PROJECT_VER</code> will hold the simple version to be used with cmakes <code>project</code> command (e.g. <code>1.0.0</code>).
A prefixed <code>v</code> in the version will be ignored.</p>
<h3 data-sourcepos="138:1-138:25" dir="auto">
<a id="user-content-cpmcmake-v0360" class="anchor" href="#cpmcmake-v0360" aria-hidden="true"></a><code>CPM.cmake</code> (v0.36.0)</h3>
<p data-sourcepos="140:1-140:117" dir="auto">Copied from: <a href="https://github.com/cpm-cmake/CPM.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/cpm-cmake/CPM.cmake</a> (Copyright Lars Melchior and contributors, MIT license, see file)</p>
<p data-sourcepos="142:1-144:118" dir="auto">CPM.cmake is a CMake script that adds dependency management capabilities to CMake.
It's built as a thin wrapper around CMake's <a href="https://cmake.org/cmake/help/latest/module/FetchContent.html" rel="nofollow noreferrer noopener" target="_blank">FetchContent</a>
module that adds version control, caching, a simple API <a href="#comparison-to-pure-fetchcontent--externalproject">and more</a>.</p>
<p data-sourcepos="146:1-146:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="147:1-151:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CPM<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">CPMAddPackage</span><span class="p">(</span><span class="s2">"https://git.ufz.de/chs/forces.git@0.3.2"</span><span class="p">)</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><project> PUBLIC forces<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h2 data-sourcepos="153:1-153:25" dir="auto">
<a id="user-content-adding-to-your-project" class="anchor" href="#adding-to-your-project" aria-hidden="true"></a>Adding to your project</h2>
<p data-sourcepos="155:1-156:92" dir="auto">In order to add these files to your project, you can either just copy the desired files or use
<a href="https://github.com/ingydotnet/git-subrepo" rel="nofollow noreferrer noopener" target="_blank">git-subrepo</a> to add this repository as a folder:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="157:1-159:3" data-canonical-lang="bash" class="code highlight js-syntax-highlight language-shell" lang="shell" v-pre="true"><code><span id="LC1" class="line" lang="shell">git subrepo clone <span class="nt">--branch</span><span class="o">=</span>main <span class="nt">--force</span> https://git.ufz.de/chs/cmake-fortran-scripts.git cmake</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="160:1-160:86" dir="auto">You should replace <code>main</code> with a specific tag (like <code>v1.8</code>) to use a released version.</p>
<h2 data-sourcepos="162:1-162:10" dir="auto">
<a id="user-content-license" class="anchor" href="#license" aria-hidden="true"></a>License</h2>
<p data-sourcepos="164:1-164:17" dir="auto">MIT License (MIT)</p>
<p data-sourcepos="166:1-166:40" dir="auto">Copyright (c) 2020 - 2023 CHS Developers</p>2023-08-07T14:21:34+02:00Sebastian Müllerhttps://git.ufz.de/chs/cmake-fortran-scripts/-/tags/v2.0v2.0<h1 data-sourcepos="1:1-1:28" dir="auto">
<a id="user-content-cmake-fortran-scripts-v20" class="anchor" href="#cmake-fortran-scripts-v20" aria-hidden="true"></a>Cmake Fortran Scripts v2.0</h1>
<p data-sourcepos="3:1-3:41" dir="auto">Cmake scripts for Fortran Projects at CHS</p>
<h2 data-sourcepos="5:1-5:16" dir="auto">
<a id="user-content-cmake-modules" class="anchor" href="#cmake-modules" aria-hidden="true"></a>Cmake Modules</h2>
<p data-sourcepos="7:1-7:90" dir="auto">These modules provide different functions and macros to be used in <code>CMakeLists.txt</code> files.</p>
<p data-sourcepos="9:1-9:130" dir="auto">To use a module, you either need to update the cmake module path (assuming these files are in a top-level folder called <code>cmake/</code>):</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="11:5-12:0" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="13:1-13:42" dir="auto">and then include the module by name, e.g.:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="15:5-16:0" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">include(CPM)</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="17:1-17:78" dir="auto">or include the module directly by path (relative to the <code>CMakeLists.txt</code> file)</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="19:5-20:0" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">include(cmake/CPM.cmake)</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="21:1-21:86" dir="auto">For package finders (e.g. YAC or NetCDF) you <strong>need</strong> to update the cmake module path.</p>
<h3 data-sourcepos="23:1-23:31" dir="auto">
<a id="user-content-fortranpreprocessorcmake" class="anchor" href="#fortranpreprocessorcmake" aria-hidden="true"></a><code>fortranpreprocessor.cmake</code>
</h3>
<p data-sourcepos="25:1-26:31" dir="auto">Draws inspiration from <a href="https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake</a> (MIT license)
to handle <code>fypp</code> pre-processor.</p>
<p data-sourcepos="28:1-28:21" dir="auto">Additional functions:</p>
<ul data-sourcepos="29:1-31:0" dir="auto">
<li data-sourcepos="29:1-29:98">
<code>get_preproc_flag</code>: checks for the pre-processor flag of the current compiler (<code>-fpp</code> or <code>-cpp</code>)</li>
<li data-sourcepos="30:1-31:0">
<code>cpp_definitions</code>: adds a compile definition and a corresponding cmake option</li>
</ul>
<p data-sourcepos="32:1-32:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="33:1-35:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>fortranpreprocessor<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="37:1-37:24" dir="auto">
<a id="user-content-codecoveragecmake" class="anchor" href="#codecoveragecmake" aria-hidden="true"></a><code>CodeCoverage.cmake</code>
</h3>
<p data-sourcepos="39:1-39:132" dir="auto">Copied from: <a href="https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake</a> (Copyright Lars Bilke, BSL 1.0 license, see file)</p>
<p data-sourcepos="41:1-41:32" dir="auto">Can be included and set up with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="42:1-51:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CodeCoverage<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">append_coverage_compiler_flags_to_target</span><span class="p">(</span>PROJECT<span class="p">)</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nf">SETUP_TARGET_FOR_COVERAGE_LCOV</span><span class="p">(</span></span>
<span id="LC4" class="line" lang="cmake"> NAME PROJECT_coverage_CI</span>
<span id="LC5" class="line" lang="cmake"> EXECUTABLE PROJECT</span>
<span id="LC6" class="line" lang="cmake"> DEPENDENCIES PROJECT</span>
<span id="LC7" class="line" lang="cmake"> GENHTML_ARGS -t <span class="s2">"PROJECT coverage"</span></span>
<span id="LC8" class="line" lang="cmake"><span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="53:1-53:26" dir="auto">
<a id="user-content-compileoptionscmake" class="anchor" href="#compileoptionscmake" aria-hidden="true"></a><code>compileoptions.cmake</code>
</h3>
<p data-sourcepos="55:1-55:26" dir="auto">Adds cmake compile options</p>
<ul data-sourcepos="56:1-63:0" dir="auto">
<li data-sourcepos="56:1-56:57">
<code>CMAKE_BUILD_MODULE_SYSTEM_INDEPENDENT</code>: setting r_path</li>
<li data-sourcepos="57:1-57:27">
<code>CMAKE_WITH_MPI</code>: use MPI</li>
<li data-sourcepos="58:1-58:33">
<code>CMAKE_WITH_OpenMP</code>: use OpenMP</li>
<li data-sourcepos="59:1-59:42">
<code>CMAKE_WITH_LAPACK</code>: use LAPACK bindings</li>
<li data-sourcepos="60:1-60:45">
<code>CMAKE_WITH_COVERAGE</code>: Coverage calculation</li>
<li data-sourcepos="61:1-61:129">
<code>CMAKE_WITH_GPROF</code>: gprof profiling information (see <a href="https://www.thegeekstuff.com/2012/08/gprof-tutorial/" rel="nofollow noreferrer noopener" target="_blank">here</a> for tutorial)</li>
<li data-sourcepos="62:1-63:0">will also search for <code>MPI</code>, <code>OpenMP</code> and <code>LAPACK</code> if the respective option is <code>ON</code>
</li>
</ul>
<p data-sourcepos="64:1-64:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="65:1-67:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>compileoptions<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="69:1-69:22" dir="auto">
<a id="user-content-findnetcdfcmake" class="anchor" href="#findnetcdfcmake" aria-hidden="true"></a><code>FindNetCDF.cmake</code>
</h3>
<p data-sourcepos="71:1-71:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="72:1-75:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">find_package</span><span class="p">(</span>NetCDF COMPONENTS Fortran<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><target> PUBLIC NetCDF::NetCDF_Fortran<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="77:1-77:43" dir="auto">To specify a particular NetCDF library, use</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="79:5-80:0" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">cmake -DNetCDF_ROOT=/path/to/netcdff -B build</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="81:1-81:59" dir="auto">or set environment variable <code>NetCDF_ROOT=/path/to/netcdff</code>.</p>
<h3 data-sourcepos="83:1-83:19" dir="auto">
<a id="user-content-findyaccmake" class="anchor" href="#findyaccmake" aria-hidden="true"></a><code>FindYAC.cmake</code>
</h3>
<p data-sourcepos="85:1-85:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="86:1-90:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">find_package</span><span class="p">(</span>YAC<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nb">target_include_directories</span><span class="p">(</span><target> PUBLIC <span class="si">${</span><span class="nv">YAC_INCLUDE_DIR</span><span class="si">}</span><span class="p">)</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><target> PUBLIC <span class="si">${</span><span class="nv">YAC_LIB</span><span class="si">}</span><span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="92:1-92:43" dir="auto">To specify a particular NetCDF library, use</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="94:5-95:0" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">cmake -DYAC_ROOT=/path/to/yac -B build</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="96:1-96:52" dir="auto">or set environment variable <code>YAC_ROOT=/path/to/yac</code>.</p>
<h3 data-sourcepos="98:1-98:19" dir="auto">
<a id="user-content-versioncmake" class="anchor" href="#versioncmake" aria-hidden="true"></a><code>version.cmake</code>
</h3>
<p data-sourcepos="100:1-100:110" dir="auto">Provides a function to read version and date from given files <code>version.txt</code> and (optional) <code>version_date.txt</code>.</p>
<p data-sourcepos="102:1-102:87" dir="auto">Can be included and used with (<code>PROJECT_VER_DEV</code> will hold the develop version string):</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="103:1-106:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>version<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">get_version</span><span class="p">(</span>PROJECT_VER PROJECT_VER_DEV PROJECT_DATE<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="108:1-111:46" dir="auto">If a development version was found (e.g. <code>1.0.0-dev0</code>), it will try to determine the latest git commit short hash and add it (e.g. <code>1.0.0-dev0+02d7e12</code>).
If there is no <code>version_date.txt</code> file or a development version was found, the script will try to determine the latest git commit date or use the current date.
<code>PROJECT_VER</code> will hold the simple version to be used with cmakes <code>project</code> command (e.g. <code>1.0.0</code>).
A prefixed <code>v</code> in the version will be ignored.</p>
<h3 data-sourcepos="113:1-113:25" dir="auto">
<a id="user-content-cpmcmake-v0360" class="anchor" href="#cpmcmake-v0360" aria-hidden="true"></a><code>CPM.cmake</code> (v0.36.0)</h3>
<p data-sourcepos="115:1-115:117" dir="auto">Copied from: <a href="https://github.com/cpm-cmake/CPM.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/cpm-cmake/CPM.cmake</a> (Copyright Lars Melchior and contributors, MIT license, see file)</p>
<p data-sourcepos="117:1-119:118" dir="auto">CPM.cmake is a CMake script that adds dependency management capabilities to CMake.
It's built as a thin wrapper around CMake's <a href="https://cmake.org/cmake/help/latest/module/FetchContent.html" rel="nofollow noreferrer noopener" target="_blank">FetchContent</a>
module that adds version control, caching, a simple API <a href="#comparison-to-pure-fetchcontent--externalproject">and more</a>.</p>
<p data-sourcepos="121:1-121:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="122:1-126:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CPM<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">CPMAddPackage</span><span class="p">(</span><span class="s2">"https://git.ufz.de/chs/forces.git@0.3.2"</span><span class="p">)</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><project> PUBLIC forces<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h2 data-sourcepos="128:1-128:25" dir="auto">
<a id="user-content-adding-to-your-project" class="anchor" href="#adding-to-your-project" aria-hidden="true"></a>Adding to your project</h2>
<p data-sourcepos="130:1-131:92" dir="auto">In order to add these files to your project, you can either just copy the desired files or use
<a href="https://github.com/ingydotnet/git-subrepo" rel="nofollow noreferrer noopener" target="_blank">git-subrepo</a> to add this repository as a folder:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="132:1-134:3" data-canonical-lang="bash" class="code highlight js-syntax-highlight language-shell" lang="shell" v-pre="true"><code><span id="LC1" class="line" lang="shell">git subrepo clone <span class="nt">--branch</span><span class="o">=</span>main <span class="nt">--force</span> https://git.ufz.de/chs/cmake-fortran-scripts.git cmake</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="135:1-135:86" dir="auto">You should replace <code>main</code> with a specific tag (like <code>v1.8</code>) to use a released version.</p>
<h2 data-sourcepos="137:1-137:10" dir="auto">
<a id="user-content-license" class="anchor" href="#license" aria-hidden="true"></a>License</h2>
<p data-sourcepos="139:1-139:17" dir="auto">MIT License (MIT)</p>
<p data-sourcepos="141:1-141:40" dir="auto">Copyright (c) 2020 - 2022 CHS Developers</p>2022-12-16T16:30:50+01:00Sebastian Müllerhttps://git.ufz.de/chs/cmake-fortran-scripts/-/tags/v1.8v1.8<h1 data-sourcepos="1:1-1:28" dir="auto">
<a id="user-content-cmake-fortran-scripts-v18" class="anchor" href="#cmake-fortran-scripts-v18" aria-hidden="true"></a>Cmake Fortran Scripts v1.8</h1>
<p data-sourcepos="3:1-3:41" dir="auto">Cmake scripts for Fortran Projects at CHS</p>
<h2 data-sourcepos="5:1-5:16" dir="auto">
<a id="user-content-cmake-modules" class="anchor" href="#cmake-modules" aria-hidden="true"></a>Cmake Modules</h2>
<p data-sourcepos="7:1-8:37" dir="auto">Modules under <code>cmake-modules</code> provide different functions and macros
to be used in <code>CMakeLists.txt</code> files.</p>
<h3 data-sourcepos="10:1-10:31" dir="auto">
<a id="user-content-fortranpreprocessorcmake" class="anchor" href="#fortranpreprocessorcmake" aria-hidden="true"></a><code>fortranpreprocessor.cmake</code>
</h3>
<p data-sourcepos="11:1-11:79" dir="auto">Based on: <a href="https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake</a></p>
<ul data-sourcepos="12:1-13:0" dir="auto">
<li data-sourcepos="12:1-13:0">handles <code>fypp</code> pre-processor</li>
</ul>
<p data-sourcepos="14:1-14:21" dir="auto">Additional functions:</p>
<ul data-sourcepos="15:1-17:0" dir="auto">
<li data-sourcepos="15:1-15:98">
<code>get_preproc_flag</code>: checks for the pre-processor flag of the current compiler (<code>-fpp</code> or <code>-cpp</code>)</li>
<li data-sourcepos="16:1-17:0">
<code>cpp_definitions</code>: adds a compile definition and a corresponding cmake option</li>
</ul>
<p data-sourcepos="18:1-18:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="19:1-21:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>fortranpreprocessor<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="23:1-23:24" dir="auto">
<a id="user-content-codecoveragecmake" class="anchor" href="#codecoveragecmake" aria-hidden="true"></a><code>CodeCoverage.cmake</code>
</h3>
<p data-sourcepos="24:1-24:81" dir="auto">Taken from: <a href="https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake</a></p>
<p data-sourcepos="26:1-26:32" dir="auto">Can be included and set up with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="27:1-36:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CodeCoverage<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">append_coverage_compiler_flags_to_target</span><span class="p">(</span>PROJECT<span class="p">)</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nf">SETUP_TARGET_FOR_COVERAGE_LCOV</span><span class="p">(</span></span>
<span id="LC4" class="line" lang="cmake"> NAME PROJECT_coverage_CI</span>
<span id="LC5" class="line" lang="cmake"> EXECUTABLE PROJECT</span>
<span id="LC6" class="line" lang="cmake"> DEPENDENCIES PROJECT</span>
<span id="LC7" class="line" lang="cmake"> GENHTML_ARGS -t <span class="s2">"PROJECT coverage"</span></span>
<span id="LC8" class="line" lang="cmake"><span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="38:1-38:26" dir="auto">
<a id="user-content-compileoptionscmake" class="anchor" href="#compileoptionscmake" aria-hidden="true"></a><code>compileoptions.cmake</code>
</h3>
<p data-sourcepos="39:1-39:26" dir="auto">Adds cmake compile options</p>
<ul data-sourcepos="40:1-47:0" dir="auto">
<li data-sourcepos="40:1-40:57">
<code>CMAKE_BUILD_MODULE_SYSTEM_INDEPENDENT</code>: setting r_path</li>
<li data-sourcepos="41:1-41:27">
<code>CMAKE_WITH_MPI</code>: use MPI</li>
<li data-sourcepos="42:1-42:33">
<code>CMAKE_WITH_OpenMP</code>: use OpenMP</li>
<li data-sourcepos="43:1-43:42">
<code>CMAKE_WITH_LAPACK</code>: use LAPACK bindings</li>
<li data-sourcepos="44:1-44:45">
<code>CMAKE_WITH_COVERAGE</code>: Coverage calculation</li>
<li data-sourcepos="45:1-45:129">
<code>CMAKE_WITH_GPROF</code>: gprof profiling information (see <a href="https://www.thegeekstuff.com/2012/08/gprof-tutorial/" rel="nofollow noreferrer noopener" target="_blank">here</a> for tutorial)</li>
<li data-sourcepos="46:1-47:0">will also search for <code>MPI</code>, <code>OpenMP</code> and <code>LAPACK</code> if the option are <code>ON</code>
</li>
</ul>
<p data-sourcepos="48:1-48:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="49:1-51:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>compileoptions<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="53:1-53:22" dir="auto">
<a id="user-content-findnetcdfcmake" class="anchor" href="#findnetcdfcmake" aria-hidden="true"></a><code>FindNetCDF.cmake</code>
</h3>
<p data-sourcepos="55:1-55:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="56:1-59:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">find_package</span><span class="p">(</span>NetCDF COMPONENTS Fortran<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><target> PUBLIC NetCDF::NetCDF_Fortran<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="61:1-61:43" dir="auto">To specify a particular NetCDF library, use</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="63:5-64:0" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">cmake -DNetCDF_ROOT=/path/to/netcdff -B build</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="65:1-65:59" dir="auto">or set environment variable <code>NetCDF_ROOT=/path/to/netcdff</code>.</p>
<h3 data-sourcepos="67:1-67:19" dir="auto">
<a id="user-content-versioncmake" class="anchor" href="#versioncmake" aria-hidden="true"></a><code>version.cmake</code>
</h3>
<p data-sourcepos="69:1-69:110" dir="auto">Provides a function to read version and date from given files <code>version.txt</code> and (optional) <code>version_date.txt</code>.</p>
<p data-sourcepos="71:1-71:87" dir="auto">Can be included and used with (<code>PROJECT_VER_DEV</code> will hold the develop version string):</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="72:1-75:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>version<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">get_version</span><span class="p">(</span>PROJECT_VER PROJECT_VER_DEV PROJECT_DATE<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="77:1-80:46" dir="auto">If a development version was found (e.g. <code>1.0.0-dev0</code>), it will try to determine the latest git commit short hash and add it (e.g. <code>1.0.0-dev0+02d7e12</code>).
If there is no <code>version_date.txt</code> file or a development version was found, the script will try to determine the latest git commit date or use the current date.
<code>PROJECT_VER</code> will hold the simple version to be used with cmakes <code>project</code> command (e.g. <code>1.0.0</code>).
A prefixed <code>v</code> in the version will be ignored.</p>
<h3 data-sourcepos="82:1-82:25" dir="auto">
<a id="user-content-cpmcmake-v0356" class="anchor" href="#cpmcmake-v0356" aria-hidden="true"></a><code>CPM.cmake</code> (v0.35.6)</h3>
<p data-sourcepos="84:1-86:118" dir="auto">CPM.cmake is a CMake script that adds dependency management capabilities to CMake.
It's built as a thin wrapper around CMake's <a href="https://cmake.org/cmake/help/latest/module/FetchContent.html" rel="nofollow noreferrer noopener" target="_blank">FetchContent</a>
module that adds version control, caching, a simple API <a href="#comparison-to-pure-fetchcontent--externalproject">and more</a>.</p>
<p data-sourcepos="88:1-88:51" dir="auto">Copied from: <a href="https://github.com/cpm-cmake/CPM.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/cpm-cmake/CPM.cmake</a></p>
<p data-sourcepos="90:1-90:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="91:1-95:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CPM<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">CPMAddPackage</span><span class="p">(</span><span class="s2">"https://git.ufz.de/chs/forces.git@0.3.2"</span><span class="p">)</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><project> PUBLIC forces<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h2 data-sourcepos="98:1-98:20" dir="auto">
<a id="user-content-cmake-cache-files" class="anchor" href="#cmake-cache-files" aria-hidden="true"></a>Cmake Cache Files</h2>
<p data-sourcepos="100:1-101:77" dir="auto">Cache files provide templates for specific cmake setups.
Cmake can be controlled with such a file (<code>exampleFile</code>) in the following way</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="102:1-104:3" data-canonical-lang="bash" class="code highlight js-syntax-highlight language-shell" lang="shell" v-pre="true"><code><span id="LC1" class="line" lang="shell">cmake <span class="nt">-C</span> exampleFile ..</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="106:1-106:73" dir="auto">Have a look at the example files in <code>cmake-cache-files</code> taken from <code>mHM</code>.</p>2022-09-28T19:00:39+02:00Sebastian Müllerhttps://git.ufz.de/chs/cmake-fortran-scripts/-/tags/v1.7v1.7<h1 data-sourcepos="1:1-1:28" dir="auto">
<a id="user-content-cmake-fortran-scripts-v17" class="anchor" href="#cmake-fortran-scripts-v17" aria-hidden="true"></a>Cmake Fortran Scripts v1.7</h1>
<p data-sourcepos="3:1-3:41" dir="auto">Cmake scripts for Fortran Projects at CHS</p>
<h2 data-sourcepos="5:1-5:16" dir="auto">
<a id="user-content-cmake-modules" class="anchor" href="#cmake-modules" aria-hidden="true"></a>Cmake Modules</h2>
<p data-sourcepos="7:1-8:37" dir="auto">Modules under <code>cmake-modules</code> provide different functions and macros
to be used in <code>CMakeLists.txt</code> files.</p>
<h3 data-sourcepos="10:1-10:31" dir="auto">
<a id="user-content-fortranpreprocessorcmake" class="anchor" href="#fortranpreprocessorcmake" aria-hidden="true"></a><code>fortranpreprocessor.cmake</code>
</h3>
<p data-sourcepos="11:1-11:79" dir="auto">Based on: <a href="https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake</a></p>
<ul data-sourcepos="12:1-13:0" dir="auto">
<li data-sourcepos="12:1-13:0">handles <code>fypp</code> pre-processor</li>
</ul>
<p data-sourcepos="14:1-14:21" dir="auto">Additional functions:</p>
<ul data-sourcepos="15:1-17:0" dir="auto">
<li data-sourcepos="15:1-15:98">
<code>get_preproc_flag</code>: checks for the pre-processor flag of the current compiler (<code>-fpp</code> or <code>-cpp</code>)</li>
<li data-sourcepos="16:1-17:0">
<code>cpp_definitions</code>: adds a compile definition and a corresponding cmake option</li>
</ul>
<p data-sourcepos="18:1-18:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="19:1-21:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>fortranpreprocessor<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="23:1-23:24" dir="auto">
<a id="user-content-codecoveragecmake" class="anchor" href="#codecoveragecmake" aria-hidden="true"></a><code>CodeCoverage.cmake</code>
</h3>
<p data-sourcepos="24:1-24:81" dir="auto">Taken from: <a href="https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake</a></p>
<p data-sourcepos="26:1-26:32" dir="auto">Can be included and set up with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="27:1-36:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CodeCoverage<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">append_coverage_compiler_flags</span><span class="p">()</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nf">SETUP_TARGET_FOR_COVERAGE_LCOV</span><span class="p">(</span></span>
<span id="LC4" class="line" lang="cmake"> NAME PROJECT_coverage_CI</span>
<span id="LC5" class="line" lang="cmake"> EXECUTABLE PROJECT</span>
<span id="LC6" class="line" lang="cmake"> DEPENDENCIES PROJECT</span>
<span id="LC7" class="line" lang="cmake"> GENHTML_ARGS -t <span class="s2">"PROJECT coverage"</span></span>
<span id="LC8" class="line" lang="cmake"><span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="38:1-38:26" dir="auto">
<a id="user-content-compileoptionscmake" class="anchor" href="#compileoptionscmake" aria-hidden="true"></a><code>compileoptions.cmake</code>
</h3>
<p data-sourcepos="39:1-39:26" dir="auto">Adds cmake compile options</p>
<ul data-sourcepos="40:1-47:0" dir="auto">
<li data-sourcepos="40:1-40:57">
<code>CMAKE_BUILD_MODULE_SYSTEM_INDEPENDENT</code>: setting r_path</li>
<li data-sourcepos="41:1-41:27">
<code>CMAKE_WITH_MPI</code>: use MPI</li>
<li data-sourcepos="42:1-42:33">
<code>CMAKE_WITH_OpenMP</code>: use OpenMP</li>
<li data-sourcepos="43:1-43:42">
<code>CMAKE_WITH_LAPACK</code>: use LAPACK bindings</li>
<li data-sourcepos="44:1-44:45">
<code>CMAKE_WITH_COVERAGE</code>: Coverage calculation</li>
<li data-sourcepos="45:1-45:129">
<code>CMAKE_WITH_GPROF</code>: gprof profiling information (see <a href="https://www.thegeekstuff.com/2012/08/gprof-tutorial/" rel="nofollow noreferrer noopener" target="_blank">here</a> for tutorial)</li>
<li data-sourcepos="46:1-47:0">will also search for <code>MPI</code>, <code>OpenMP</code> and <code>LAPACK</code> if the option are <code>ON</code>
</li>
</ul>
<p data-sourcepos="48:1-48:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="49:1-51:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>compileoptions<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="53:1-53:22" dir="auto">
<a id="user-content-findnetcdfcmake" class="anchor" href="#findnetcdfcmake" aria-hidden="true"></a><code>FindNetCDF.cmake</code>
</h3>
<p data-sourcepos="55:1-55:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="56:1-59:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">find_package</span><span class="p">(</span>NetCDF COMPONENTS Fortran<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><target> PUBLIC NetCDF::NetCDF_Fortran<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="61:1-61:43" dir="auto">To specify a particular NetCDF library, use</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="63:5-64:0" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">cmake -DNetCDF_ROOT=/path/to/netcdff -B build</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="65:1-65:59" dir="auto">or set environment variable <code>NetCDF_ROOT=/path/to/netcdff</code>.</p>
<h3 data-sourcepos="67:1-67:19" dir="auto">
<a id="user-content-versioncmake" class="anchor" href="#versioncmake" aria-hidden="true"></a><code>version.cmake</code>
</h3>
<p data-sourcepos="69:1-69:110" dir="auto">Provides a function to read version and date from given files <code>version.txt</code> and (optional) <code>version_date.txt</code>.</p>
<p data-sourcepos="71:1-71:87" dir="auto">Can be included and used with (<code>PROJECT_VER_DEV</code> will hold the develop version string):</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="72:1-75:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>version<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">get_version</span><span class="p">(</span>PROJECT_VER PROJECT_VER_DEV PROJECT_DATE<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="77:1-80:46" dir="auto">If a development version was found (e.g. <code>1.0.0-dev0</code>), it will try to determine the latest git commit short hash and add it (e.g. <code>1.0.0-dev0+02d7e12</code>).
If there is no <code>version_date.txt</code> file or a development version was found, the script will try to determine the latest git commit date or use the current date.
<code>PROJECT_VER</code> will hold the simple version to be used with cmakes <code>project</code> command (e.g. <code>1.0.0</code>).
A prefixed <code>v</code> in the version will be ignored.</p>
<h3 data-sourcepos="82:1-82:25" dir="auto">
<a id="user-content-cpmcmake-v0351" class="anchor" href="#cpmcmake-v0351" aria-hidden="true"></a><code>CPM.cmake</code> (v0.35.1)</h3>
<p data-sourcepos="84:1-86:118" dir="auto">CPM.cmake is a CMake script that adds dependency management capabilities to CMake.
It's built as a thin wrapper around CMake's <a href="https://cmake.org/cmake/help/latest/module/FetchContent.html" rel="nofollow noreferrer noopener" target="_blank">FetchContent</a>
module that adds version control, caching, a simple API <a href="#comparison-to-pure-fetchcontent--externalproject">and more</a>.</p>
<p data-sourcepos="88:1-88:51" dir="auto">Copied from: <a href="https://github.com/cpm-cmake/CPM.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/cpm-cmake/CPM.cmake</a></p>
<p data-sourcepos="90:1-90:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="91:1-95:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CPM<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">CPMAddPackage</span><span class="p">(</span><span class="s2">"https://git.ufz.de/chs/forces.git@0.3.2"</span><span class="p">)</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><project> PUBLIC forces<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h2 data-sourcepos="98:1-98:20" dir="auto">
<a id="user-content-cmake-cache-files" class="anchor" href="#cmake-cache-files" aria-hidden="true"></a>Cmake Cache Files</h2>
<p data-sourcepos="100:1-101:77" dir="auto">Cache files provide templates for specific cmake setups.
Cmake can be controlled with such a file (<code>exampleFile</code>) in the following way</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="102:1-104:3" data-canonical-lang="bash" class="code highlight js-syntax-highlight language-shell" lang="shell" v-pre="true"><code><span id="LC1" class="line" lang="shell">cmake <span class="nt">-C</span> exampleFile ..</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="106:1-106:73" dir="auto">Have a look at the example files in <code>cmake-cache-files</code> taken from <code>mHM</code>.</p>2022-06-22T14:08:31+02:00Sebastian Müllerhttps://git.ufz.de/chs/cmake-fortran-scripts/-/tags/v1.6v1.6<h1 data-sourcepos="1:1-1:28" dir="auto">
<a id="user-content-cmake-fortran-scripts-v16" class="anchor" href="#cmake-fortran-scripts-v16" aria-hidden="true"></a>Cmake Fortran Scripts v1.6</h1>
<p data-sourcepos="3:1-3:41" dir="auto">Cmake scripts for Fortran Projects at CHS</p>
<h2 data-sourcepos="5:1-5:16" dir="auto">
<a id="user-content-cmake-modules" class="anchor" href="#cmake-modules" aria-hidden="true"></a>Cmake Modules</h2>
<p data-sourcepos="7:1-8:37" dir="auto">Modules under <code>cmake-modules</code> provide different functions and macros
to be used in <code>CMakeLists.txt</code> files.</p>
<h3 data-sourcepos="10:1-10:31" dir="auto">
<a id="user-content-fortranpreprocessorcmake" class="anchor" href="#fortranpreprocessorcmake" aria-hidden="true"></a><code>fortranpreprocessor.cmake</code>
</h3>
<p data-sourcepos="11:1-11:79" dir="auto">Based on: <a href="https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake</a></p>
<ul data-sourcepos="12:1-13:0" dir="auto">
<li data-sourcepos="12:1-13:0">handles <code>fypp</code> pre-processor</li>
</ul>
<p data-sourcepos="14:1-14:21" dir="auto">Additional functions:</p>
<ul data-sourcepos="15:1-17:0" dir="auto">
<li data-sourcepos="15:1-15:98">
<code>get_preproc_flag</code>: checks for the pre-processor flag of the current compiler (<code>-fpp</code> or <code>-cpp</code>)</li>
<li data-sourcepos="16:1-17:0">
<code>cpp_definitions</code>: adds a compile definition and a corresponding cmake option</li>
</ul>
<p data-sourcepos="18:1-18:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="19:1-21:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>fortranpreprocessor<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="23:1-23:24" dir="auto">
<a id="user-content-codecoveragecmake" class="anchor" href="#codecoveragecmake" aria-hidden="true"></a><code>CodeCoverage.cmake</code>
</h3>
<p data-sourcepos="24:1-24:81" dir="auto">Taken from: <a href="https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake</a></p>
<p data-sourcepos="26:1-26:32" dir="auto">Can be included and set up with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="27:1-36:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CodeCoverage<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">append_coverage_compiler_flags</span><span class="p">()</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nf">SETUP_TARGET_FOR_COVERAGE_LCOV</span><span class="p">(</span></span>
<span id="LC4" class="line" lang="cmake"> NAME PROJECT_coverage_CI</span>
<span id="LC5" class="line" lang="cmake"> EXECUTABLE PROJECT</span>
<span id="LC6" class="line" lang="cmake"> DEPENDENCIES PROJECT</span>
<span id="LC7" class="line" lang="cmake"> GENHTML_ARGS -t <span class="s2">"PROJECT coverage"</span></span>
<span id="LC8" class="line" lang="cmake"><span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="38:1-38:26" dir="auto">
<a id="user-content-compileoptionscmake" class="anchor" href="#compileoptionscmake" aria-hidden="true"></a><code>compileoptions.cmake</code>
</h3>
<p data-sourcepos="39:1-39:26" dir="auto">Adds cmake compile options</p>
<ul data-sourcepos="40:1-47:0" dir="auto">
<li data-sourcepos="40:1-40:57">
<code>CMAKE_BUILD_MODULE_SYSTEM_INDEPENDENT</code>: setting r_path</li>
<li data-sourcepos="41:1-41:27">
<code>CMAKE_WITH_MPI</code>: use MPI</li>
<li data-sourcepos="42:1-42:33">
<code>CMAKE_WITH_OpenMP</code>: use OpenMP</li>
<li data-sourcepos="43:1-43:42">
<code>CMAKE_WITH_LAPACK</code>: use LAPACK bindings</li>
<li data-sourcepos="44:1-44:45">
<code>CMAKE_WITH_COVERAGE</code>: Coverage calculation</li>
<li data-sourcepos="45:1-45:129">
<code>CMAKE_WITH_GPROF</code>: gprof profiling information (see <a href="https://www.thegeekstuff.com/2012/08/gprof-tutorial/" rel="nofollow noreferrer noopener" target="_blank">here</a> for tutorial)</li>
<li data-sourcepos="46:1-47:0">will also search for <code>MPI</code>, <code>OpenMP</code> and <code>LAPACK</code> if the option are <code>ON</code>
</li>
</ul>
<p data-sourcepos="48:1-48:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="49:1-51:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>compileoptions<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="53:1-53:22" dir="auto">
<a id="user-content-findnetcdfcmake" class="anchor" href="#findnetcdfcmake" aria-hidden="true"></a><code>FindNetCDF.cmake</code>
</h3>
<p data-sourcepos="55:1-55:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="56:1-59:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">find_package</span><span class="p">(</span>NetCDF COMPONENTS Fortran<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><target> PUBLIC NetCDF::NetCDF_Fortran<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="61:1-61:43" dir="auto">To specify a particular NetCDF library, use</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="63:5-64:0" class="code highlight js-syntax-highlight language-plaintext" lang="plaintext" v-pre="true"><code><span id="LC1" class="line" lang="plaintext">cmake -DNetCDF_ROOT=/path/to/netcdff -B build</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="65:1-65:59" dir="auto">or set environment variable <code>NetCDF_ROOT=/path/to/netcdff</code>.</p>
<h3 data-sourcepos="68:1-68:19" dir="auto">
<a id="user-content-versioncmake" class="anchor" href="#versioncmake" aria-hidden="true"></a><code>version.cmake</code>
</h3>
<p data-sourcepos="69:1-69:101" dir="auto">Provides a function to read version and date from a given files <code>version.txt</code> and <code>version-date.txt</code>.</p>
<p data-sourcepos="71:1-71:87" dir="auto">Can be included and used with (<code>PROJECT_VER_DEV</code> will hold the develop version string):</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="72:1-75:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>version<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">get_version</span><span class="p">(</span>PROJECT_VER PROJECT_VER_DEV PROJECT_DATE<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="77:1-77:25" dir="auto">
<a id="user-content-cpmcmake-v0350" class="anchor" href="#cpmcmake-v0350" aria-hidden="true"></a><code>CPM.cmake</code> (v0.35.0)</h3>
<p data-sourcepos="78:1-80:118" dir="auto">CPM.cmake is a CMake script that adds dependency management capabilities to CMake.
It's built as a thin wrapper around CMake's <a href="https://cmake.org/cmake/help/latest/module/FetchContent.html" rel="nofollow noreferrer noopener" target="_blank">FetchContent</a>
module that adds version control, caching, a simple API <a href="#comparison-to-pure-fetchcontent--externalproject">and more</a>.</p>
<p data-sourcepos="82:1-82:51" dir="auto">Copied from: <a href="https://github.com/cpm-cmake/CPM.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/cpm-cmake/CPM.cmake</a></p>
<p data-sourcepos="84:1-84:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="85:1-93:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CPM<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">CPMAddPackage</span><span class="p">(</span></span>
<span id="LC3" class="line" lang="cmake"> NAME forces</span>
<span id="LC4" class="line" lang="cmake"> GIT_REPOSITORY https://git.ufz.de/chs/forces.git</span>
<span id="LC5" class="line" lang="cmake"> GIT_TAG v0.1.0</span>
<span id="LC6" class="line" lang="cmake"><span class="p">)</span></span>
<span id="LC7" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><project> PUBLIC forces<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h2 data-sourcepos="95:1-95:20" dir="auto">
<a id="user-content-cmake-cache-files" class="anchor" href="#cmake-cache-files" aria-hidden="true"></a>Cmake Cache Files</h2>
<p data-sourcepos="97:1-98:77" dir="auto">Cache files provide templates for specific cmake setups.
Cmake can be controlled with such a file (<code>exampleFile</code>) in the following way</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="99:1-101:3" data-canonical-lang="bash" class="code highlight js-syntax-highlight language-shell" lang="shell" v-pre="true"><code><span id="LC1" class="line" lang="shell">cmake <span class="nt">-C</span> exampleFile ..</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="103:1-103:73" dir="auto">Have a look at the example files in <code>cmake-cache-files</code> taken from <code>mHM</code>.</p>2022-04-13T17:03:46+02:00Sebastian Müllerhttps://git.ufz.de/chs/cmake-fortran-scripts/-/tags/v1.5v1.5<h1 data-sourcepos="1:1-1:28" dir="auto">
<a id="user-content-cmake-fortran-scripts-v15" class="anchor" href="#cmake-fortran-scripts-v15" aria-hidden="true"></a>Cmake Fortran Scripts v1.5</h1>
<p data-sourcepos="3:1-3:41" dir="auto">Cmake scripts for Fortran Projects at CHS</p>
<h2 data-sourcepos="5:1-5:16" dir="auto">
<a id="user-content-cmake-modules" class="anchor" href="#cmake-modules" aria-hidden="true"></a>Cmake Modules</h2>
<p data-sourcepos="7:1-8:37" dir="auto">Modules under <code>cmake-modules</code> provide different functions and macros
to be used in <code>CMakeLists.txt</code> files.</p>
<h3 data-sourcepos="10:1-10:31" dir="auto">
<a id="user-content-fortranpreprocessorcmake" class="anchor" href="#fortranpreprocessorcmake" aria-hidden="true"></a><code>fortranpreprocessor.cmake</code>
</h3>
<p data-sourcepos="11:1-11:79" dir="auto">Based on: <a href="https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake</a></p>
<ul data-sourcepos="12:1-13:0" dir="auto">
<li data-sourcepos="12:1-13:0">handles <code>fypp</code> pre-processor</li>
</ul>
<p data-sourcepos="14:1-14:21" dir="auto">Additional functions:</p>
<ul data-sourcepos="15:1-17:0" dir="auto">
<li data-sourcepos="15:1-15:98">
<code>get_preproc_flag</code>: checks for the pre-processor flag of the current compiler (<code>-fpp</code> or <code>-cpp</code>)</li>
<li data-sourcepos="16:1-17:0">
<code>cpp_definitions</code>: adds a compile definition and a corresponding cmake option</li>
</ul>
<p data-sourcepos="18:1-18:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="19:1-21:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>fortranpreprocessor<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="23:1-23:24" dir="auto">
<a id="user-content-codecoveragecmake" class="anchor" href="#codecoveragecmake" aria-hidden="true"></a><code>CodeCoverage.cmake</code>
</h3>
<p data-sourcepos="24:1-24:81" dir="auto">Taken from: <a href="https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake</a></p>
<p data-sourcepos="26:1-26:32" dir="auto">Can be included and set up with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="27:1-36:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CodeCoverage<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">append_coverage_compiler_flags</span><span class="p">()</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nf">SETUP_TARGET_FOR_COVERAGE_LCOV</span><span class="p">(</span></span>
<span id="LC4" class="line" lang="cmake"> NAME PROJECT_coverage_CI</span>
<span id="LC5" class="line" lang="cmake"> EXECUTABLE PROJECT</span>
<span id="LC6" class="line" lang="cmake"> DEPENDENCIES PROJECT</span>
<span id="LC7" class="line" lang="cmake"> GENHTML_ARGS -t <span class="s2">"PROJECT coverage"</span></span>
<span id="LC8" class="line" lang="cmake"><span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="38:1-38:26" dir="auto">
<a id="user-content-compileoptionscmake" class="anchor" href="#compileoptionscmake" aria-hidden="true"></a><code>compileoptions.cmake</code>
</h3>
<p data-sourcepos="39:1-39:26" dir="auto">Adds cmake compile options</p>
<ul data-sourcepos="40:1-47:0" dir="auto">
<li data-sourcepos="40:1-40:57">
<code>CMAKE_BUILD_MODULE_SYSTEM_INDEPENDENT</code>: setting r_path</li>
<li data-sourcepos="41:1-41:27">
<code>CMAKE_WITH_MPI</code>: use MPI</li>
<li data-sourcepos="42:1-42:33">
<code>CMAKE_WITH_OpenMP</code>: use OpenMP</li>
<li data-sourcepos="43:1-43:42">
<code>CMAKE_WITH_LAPACK</code>: use LAPACK bindings</li>
<li data-sourcepos="44:1-44:45">
<code>CMAKE_WITH_COVERAGE</code>: Coverage calculation</li>
<li data-sourcepos="45:1-45:129">
<code>CMAKE_WITH_GPROF</code>: gprof profiling information (see <a href="https://www.thegeekstuff.com/2012/08/gprof-tutorial/" rel="nofollow noreferrer noopener" target="_blank">here</a> for tutorial)</li>
<li data-sourcepos="46:1-47:0">will also search for <code>MPI</code>, <code>OpenMP</code> and <code>LAPACK</code> if the option are <code>ON</code>
</li>
</ul>
<p data-sourcepos="48:1-48:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="49:1-51:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>compileoptions<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="53:1-53:22" dir="auto">
<a id="user-content-findnetcdfcmake" class="anchor" href="#findnetcdfcmake" aria-hidden="true"></a><code>FindNetCDF.cmake</code>
</h3>
<p data-sourcepos="54:1-54:116" dir="auto">Copied from <a href="https://github.com/NOAA-EMC/CMakeModules/blob/develop/Modules/FindNetCDF.cmake" rel="nofollow noreferrer noopener" target="_blank">NOAA-EMC/CMakeModules</a>.</p>
<p data-sourcepos="56:1-56:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="57:1-60:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">find_package</span><span class="p">(</span>NetCDF COMPONENTS Fortran<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><target> PUBLIC NetCDF::NetCDF_Fortran<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="62:1-62:19" dir="auto">
<a id="user-content-versioncmake" class="anchor" href="#versioncmake" aria-hidden="true"></a><code>version.cmake</code>
</h3>
<p data-sourcepos="63:1-63:101" dir="auto">Provides a function to read version and date from a given files <code>version.txt</code> and <code>version-date.txt</code>.</p>
<p data-sourcepos="65:1-65:87" dir="auto">Can be included and used with (<code>PROJECT_VER_DEV</code> will hold the develop version string):</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="66:1-69:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>version<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">get_version</span><span class="p">(</span>PROJECT_VER PROJECT_VER_DEV PROJECT_DATE<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="71:1-71:25" dir="auto">
<a id="user-content-cpmcmake-v0340" class="anchor" href="#cpmcmake-v0340" aria-hidden="true"></a><code>CPM.cmake</code> (v0.34.0)</h3>
<p data-sourcepos="72:1-74:118" dir="auto">CPM.cmake is a CMake script that adds dependency management capabilities to CMake.
It's built as a thin wrapper around CMake's <a href="https://cmake.org/cmake/help/latest/module/FetchContent.html" rel="nofollow noreferrer noopener" target="_blank">FetchContent</a>
module that adds version control, caching, a simple API <a href="#comparison-to-pure-fetchcontent--externalproject">and more</a>.</p>
<p data-sourcepos="76:1-76:51" dir="auto">Copied from: <a href="https://github.com/cpm-cmake/CPM.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/cpm-cmake/CPM.cmake</a></p>
<p data-sourcepos="78:1-78:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="79:1-87:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CPM<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">CPMAddPackage</span><span class="p">(</span></span>
<span id="LC3" class="line" lang="cmake"> NAME forces</span>
<span id="LC4" class="line" lang="cmake"> GIT_REPOSITORY https://git.ufz.de/chs/forces.git</span>
<span id="LC5" class="line" lang="cmake"> GIT_TAG v0.1.0</span>
<span id="LC6" class="line" lang="cmake"><span class="p">)</span></span>
<span id="LC7" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><project> PUBLIC forces<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h2 data-sourcepos="89:1-89:20" dir="auto">
<a id="user-content-cmake-cache-files" class="anchor" href="#cmake-cache-files" aria-hidden="true"></a>Cmake Cache Files</h2>
<p data-sourcepos="91:1-92:77" dir="auto">Cache files provide templates for specific cmake setups.
Cmake can be controlled with such a file (<code>exampleFile</code>) in the following way</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="93:1-95:3" data-canonical-lang="bash" class="code highlight js-syntax-highlight language-shell" lang="shell" v-pre="true"><code><span id="LC1" class="line" lang="shell">cmake <span class="nt">-C</span> exampleFile ..</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="97:1-97:73" dir="auto">Have a look at the example files in <code>cmake-cache-files</code> taken from <code>mHM</code>.</p>2021-09-17T18:46:44+02:00Sebastian Müllerhttps://git.ufz.de/chs/cmake-fortran-scripts/-/tags/v1.4v1.4<h1 data-sourcepos="1:1-1:28" dir="auto">
<a id="user-content-cmake-fortran-scripts-v14" class="anchor" href="#cmake-fortran-scripts-v14" aria-hidden="true"></a>Cmake Fortran Scripts v1.4</h1>
<p data-sourcepos="3:1-3:41" dir="auto">Cmake scripts for Fortran Projects at CHS</p>
<h2 data-sourcepos="5:1-5:16" dir="auto">
<a id="user-content-cmake-modules" class="anchor" href="#cmake-modules" aria-hidden="true"></a>Cmake Modules</h2>
<p data-sourcepos="7:1-8:37" dir="auto">Modules under <code>cmake-modules</code> provide different functions and macros
to be used in <code>CMakeLists.txt</code> files.</p>
<h3 data-sourcepos="10:1-10:31" dir="auto">
<a id="user-content-fortranpreprocessorcmake" class="anchor" href="#fortranpreprocessorcmake" aria-hidden="true"></a><code>fortranpreprocessor.cmake</code>
</h3>
<p data-sourcepos="11:1-11:79" dir="auto">Based on: <a href="https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake</a></p>
<ul data-sourcepos="12:1-13:0" dir="auto">
<li data-sourcepos="12:1-13:0">handles <code>fypp</code> pre-processor</li>
</ul>
<p data-sourcepos="14:1-14:21" dir="auto">Additional functions:</p>
<ul data-sourcepos="15:1-17:0" dir="auto">
<li data-sourcepos="15:1-15:98">
<code>get_preproc_flag</code>: checks for the pre-processor flag of the current compiler (<code>-fpp</code> or <code>-cpp</code>)</li>
<li data-sourcepos="16:1-17:0">
<code>cpp_definitions</code>: adds a compile definition and a corresponding cmake option</li>
</ul>
<p data-sourcepos="18:1-18:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="19:1-21:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>fortranpreprocessor<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="23:1-23:24" dir="auto">
<a id="user-content-codecoveragecmake" class="anchor" href="#codecoveragecmake" aria-hidden="true"></a><code>CodeCoverage.cmake</code>
</h3>
<p data-sourcepos="24:1-24:81" dir="auto">Taken from: <a href="https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake</a></p>
<p data-sourcepos="26:1-26:32" dir="auto">Can be included and set up with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="27:1-36:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CodeCoverage<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">append_coverage_compiler_flags</span><span class="p">()</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nf">SETUP_TARGET_FOR_COVERAGE_LCOV</span><span class="p">(</span></span>
<span id="LC4" class="line" lang="cmake"> NAME PROJECT_coverage_CI</span>
<span id="LC5" class="line" lang="cmake"> EXECUTABLE PROJECT</span>
<span id="LC6" class="line" lang="cmake"> DEPENDENCIES PROJECT</span>
<span id="LC7" class="line" lang="cmake"> GENHTML_ARGS -t <span class="s2">"PROJECT coverage"</span></span>
<span id="LC8" class="line" lang="cmake"><span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="38:1-38:26" dir="auto">
<a id="user-content-compileoptionscmake" class="anchor" href="#compileoptionscmake" aria-hidden="true"></a><code>compileoptions.cmake</code>
</h3>
<p data-sourcepos="39:1-39:26" dir="auto">Adds cmake compile options</p>
<ul data-sourcepos="40:1-47:0" dir="auto">
<li data-sourcepos="40:1-40:57">
<code>CMAKE_BUILD_MODULE_SYSTEM_INDEPENDENT</code>: setting r_path</li>
<li data-sourcepos="41:1-41:27">
<code>CMAKE_WITH_MPI</code>: use MPI</li>
<li data-sourcepos="42:1-42:33">
<code>CMAKE_WITH_OpenMP</code>: use OpenMP</li>
<li data-sourcepos="43:1-43:42">
<code>CMAKE_WITH_LAPACK</code>: use LAPACK bindings</li>
<li data-sourcepos="44:1-44:45">
<code>CMAKE_WITH_COVERAGE</code>: Coverage calculation</li>
<li data-sourcepos="45:1-45:129">
<code>CMAKE_WITH_GPROF</code>: gprof profiling information (see <a href="https://www.thegeekstuff.com/2012/08/gprof-tutorial/" rel="nofollow noreferrer noopener" target="_blank">here</a> for tutorial)</li>
<li data-sourcepos="46:1-47:0">will also search for <code>MPI</code>, <code>OpenMP</code> and <code>LAPACK</code> if the option are <code>ON</code>
</li>
</ul>
<p data-sourcepos="48:1-48:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="49:1-51:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>compileoptions<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="53:1-53:22" dir="auto">
<a id="user-content-findnetcdfcmake" class="anchor" href="#findnetcdfcmake" aria-hidden="true"></a><code>FindNetCDF.cmake</code>
</h3>
<p data-sourcepos="54:1-54:116" dir="auto">Copied from <a href="https://github.com/NOAA-EMC/CMakeModules/blob/develop/Modules/FindNetCDF.cmake" rel="nofollow noreferrer noopener" target="_blank">NOAA-EMC/CMakeModules</a>.</p>
<p data-sourcepos="56:1-56:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="57:1-60:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">find_package</span><span class="p">(</span>NetCDF COMPONENTS Fortran<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><target> PUBLIC NetCDF::NetCDF_Fortran<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="62:1-62:19" dir="auto">
<a id="user-content-versioncmake" class="anchor" href="#versioncmake" aria-hidden="true"></a><code>version.cmake</code>
</h3>
<p data-sourcepos="63:1-63:101" dir="auto">Provides a function to read version and date from a given files <code>version.txt</code> and <code>version-date.txt</code>.</p>
<p data-sourcepos="65:1-65:87" dir="auto">Can be included and used with (<code>PROJECT_VER_DEV</code> will hold the develop version string):</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="66:1-69:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>version<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">get_version</span><span class="p">(</span>PROJECT_VER PROJECT_VER_DEV PROJECT_DATE<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h2 data-sourcepos="71:1-71:20" dir="auto">
<a id="user-content-cmake-cache-files" class="anchor" href="#cmake-cache-files" aria-hidden="true"></a>Cmake Cache Files</h2>
<p data-sourcepos="73:1-74:77" dir="auto">Cache files provide templates for specific cmake setups.
Cmake can be controlled with such a file (<code>exampleFile</code>) in the following way</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="75:1-77:3" data-canonical-lang="bash" class="code highlight js-syntax-highlight language-shell" lang="shell" v-pre="true"><code><span id="LC1" class="line" lang="shell">cmake <span class="nt">-C</span> exampleFile ..</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="79:1-79:73" dir="auto">Have a look at the example files in <code>cmake-cache-files</code> taken from <code>mHM</code>.</p>2021-07-08T23:20:41+02:00Robert Schweppehttps://git.ufz.de/chs/cmake-fortran-scripts/-/tags/v1.3v1.3<h1 data-sourcepos="1:1-1:28" dir="auto">
<a id="user-content-cmake-fortran-scripts-v13" class="anchor" href="#cmake-fortran-scripts-v13" aria-hidden="true"></a>Cmake Fortran Scripts v1.3</h1>
<p data-sourcepos="3:1-3:41" dir="auto">Cmake scripts for Fortran Projects at CHS</p>
<h2 data-sourcepos="5:1-5:16" dir="auto">
<a id="user-content-cmake-modules" class="anchor" href="#cmake-modules" aria-hidden="true"></a>Cmake Modules</h2>
<p data-sourcepos="7:1-8:37" dir="auto">Modules under <code>cmake-modules</code> provide different functions and macros
to be used in <code>CMakeLists.txt</code> files.</p>
<h3 data-sourcepos="10:1-10:31" dir="auto">
<a id="user-content-fortranpreprocessorcmake" class="anchor" href="#fortranpreprocessorcmake" aria-hidden="true"></a><code>fortranpreprocessor.cmake</code>
</h3>
<p data-sourcepos="11:1-11:79" dir="auto">Based on: <a href="https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake</a></p>
<ul data-sourcepos="12:1-13:0" dir="auto">
<li data-sourcepos="12:1-13:0">handles <code>fypp</code> pre-processor</li>
</ul>
<p data-sourcepos="14:1-14:21" dir="auto">Additional functions:</p>
<ul data-sourcepos="15:1-17:0" dir="auto">
<li data-sourcepos="15:1-15:98">
<code>get_preproc_flag</code>: checks for the pre-processor flag of the current compiler (<code>-fpp</code> or <code>-cpp</code>)</li>
<li data-sourcepos="16:1-17:0">
<code>cpp_definitions</code>: adds a compile definition and a corresponding cmake option</li>
</ul>
<p data-sourcepos="18:1-18:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="19:1-21:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>fortranpreprocessor<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="23:1-23:24" dir="auto">
<a id="user-content-codecoveragecmake" class="anchor" href="#codecoveragecmake" aria-hidden="true"></a><code>CodeCoverage.cmake</code>
</h3>
<p data-sourcepos="24:1-24:81" dir="auto">Taken from: <a href="https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake</a></p>
<p data-sourcepos="26:1-26:32" dir="auto">Can be included and set up with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="27:1-36:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CodeCoverage<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">append_coverage_compiler_flags</span><span class="p">()</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nf">SETUP_TARGET_FOR_COVERAGE_LCOV</span><span class="p">(</span></span>
<span id="LC4" class="line" lang="cmake"> NAME PROJECT_coverage_CI</span>
<span id="LC5" class="line" lang="cmake"> EXECUTABLE PROJECT</span>
<span id="LC6" class="line" lang="cmake"> DEPENDENCIES PROJECT</span>
<span id="LC7" class="line" lang="cmake"> GENHTML_ARGS -t <span class="s2">"PROJECT coverage"</span></span>
<span id="LC8" class="line" lang="cmake"><span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="38:1-38:26" dir="auto">
<a id="user-content-compileoptionscmake" class="anchor" href="#compileoptionscmake" aria-hidden="true"></a><code>compileoptions.cmake</code>
</h3>
<p data-sourcepos="39:1-39:26" dir="auto">Adds cmake compile options</p>
<ul data-sourcepos="40:1-47:0" dir="auto">
<li data-sourcepos="40:1-40:57">
<code>CMAKE_BUILD_MODULE_SYSTEM_INDEPENDENT</code>: setting r_path</li>
<li data-sourcepos="41:1-41:27">
<code>CMAKE_WITH_MPI</code>: use MPI</li>
<li data-sourcepos="42:1-42:33">
<code>CMAKE_WITH_OpenMP</code>: use OpenMP</li>
<li data-sourcepos="43:1-43:42">
<code>CMAKE_WITH_LAPACK</code>: use LAPACK bindings</li>
<li data-sourcepos="44:1-44:45">
<code>CMAKE_WITH_COVERAGE</code>: Coverage calculation</li>
<li data-sourcepos="45:1-45:129">
<code>CMAKE_WITH_GPROF</code>: gprof profiling information (see <a href="https://www.thegeekstuff.com/2012/08/gprof-tutorial/" rel="nofollow noreferrer noopener" target="_blank">here</a> for tutorial)</li>
<li data-sourcepos="46:1-47:0">will also search for <code>MPI</code>, <code>OpenMP</code> and <code>LAPACK</code> if the option are <code>ON</code>
</li>
</ul>
<p data-sourcepos="48:1-48:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="49:1-51:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>compileoptions<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="53:1-53:22" dir="auto">
<a id="user-content-findnetcdfcmake" class="anchor" href="#findnetcdfcmake" aria-hidden="true"></a><code>FindNetCDF.cmake</code>
</h3>
<p data-sourcepos="54:1-54:116" dir="auto">Copied from <a href="https://github.com/NOAA-EMC/CMakeModules/blob/develop/Modules/FindNetCDF.cmake" rel="nofollow noreferrer noopener" target="_blank">NOAA-EMC/CMakeModules</a>.</p>
<p data-sourcepos="56:1-56:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="57:1-60:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">find_package</span><span class="p">(</span>NetCDF COMPONENTS Fortran<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><lib_name> PUBLIC NetCDF::NetCDF_Fortran<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="62:1-62:19" dir="auto">
<a id="user-content-versioncmake" class="anchor" href="#versioncmake" aria-hidden="true"></a><code>version.cmake</code>
</h3>
<p data-sourcepos="63:1-63:101" dir="auto">Provides a function to read version and date from a given files <code>version.txt</code> and <code>version-date.txt</code>.</p>
<p data-sourcepos="65:1-65:87" dir="auto">Can be included and used with (<code>PROJECT_VER_DEV</code> will hold the develop version string):</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="66:1-69:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>version<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">get_version</span><span class="p">(</span>PROJECT_VER PROJECT_VER_DEV PROJECT_DATE<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h2 data-sourcepos="71:1-71:20" dir="auto">
<a id="user-content-cmake-cache-files" class="anchor" href="#cmake-cache-files" aria-hidden="true"></a>Cmake Cache Files</h2>
<p data-sourcepos="73:1-74:77" dir="auto">Cache files provide templates for specific cmake setups.
Cmake can be controlled with such a file (<code>exampleFile</code>) in the following way</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="75:1-77:3" data-canonical-lang="bash" class="code highlight js-syntax-highlight language-shell" lang="shell" v-pre="true"><code><span id="LC1" class="line" lang="shell">cmake <span class="nt">-C</span> exampleFile ..</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="79:1-79:73" dir="auto">Have a look at the example files in <code>cmake-cache-files</code> taken from <code>mHM</code>.</p>2021-05-10T23:33:41+02:00Sebastian Müllerhttps://git.ufz.de/chs/cmake-fortran-scripts/-/tags/v1.2v1.2<h1 data-sourcepos="1:1-1:28" dir="auto">
<a id="user-content-cmake-fortran-scripts-v12" class="anchor" href="#cmake-fortran-scripts-v12" aria-hidden="true"></a>Cmake Fortran Scripts v1.2</h1>
<p data-sourcepos="3:1-3:41" dir="auto">Cmake scripts for Fortran Projects at CHS</p>
<h2 data-sourcepos="5:1-5:16" dir="auto">
<a id="user-content-cmake-modules" class="anchor" href="#cmake-modules" aria-hidden="true"></a>Cmake Modules</h2>
<p data-sourcepos="7:1-8:37" dir="auto">Modules under <code>cmake-modules</code> provide different functions and macros
to be used in <code>CMakeLists.txt</code> files.</p>
<h3 data-sourcepos="10:1-10:31" dir="auto">
<a id="user-content-fortranpreprocessorcmake" class="anchor" href="#fortranpreprocessorcmake" aria-hidden="true"></a><code>fortranpreprocessor.cmake</code>
</h3>
<p data-sourcepos="11:1-11:79" dir="auto">Based on: <a href="https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake</a></p>
<ul data-sourcepos="12:1-13:0" dir="auto">
<li data-sourcepos="12:1-13:0">handles <code>fypp</code> pre-processor</li>
</ul>
<p data-sourcepos="14:1-14:21" dir="auto">Additional functions:</p>
<ul data-sourcepos="15:1-17:0" dir="auto">
<li data-sourcepos="15:1-15:98">
<code>get_preproc_flag</code>: checks for the pre-processor flag of the current compiler (<code>-fpp</code> or <code>-cpp</code>)</li>
<li data-sourcepos="16:1-17:0">
<code>cpp_definitions</code>: adds a compile definition and a corresponding cmake option</li>
</ul>
<p data-sourcepos="18:1-18:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="19:1-21:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>fortranpreprocessor<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="23:1-23:24" dir="auto">
<a id="user-content-codecoveragecmake" class="anchor" href="#codecoveragecmake" aria-hidden="true"></a><code>CodeCoverage.cmake</code>
</h3>
<p data-sourcepos="24:1-24:81" dir="auto">Taken from: <a href="https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake</a></p>
<p data-sourcepos="26:1-26:32" dir="auto">Can be included and set up with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="27:1-36:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CodeCoverage<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">append_coverage_compiler_flags</span><span class="p">()</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nf">SETUP_TARGET_FOR_COVERAGE_LCOV</span><span class="p">(</span></span>
<span id="LC4" class="line" lang="cmake"> NAME PROJECT_coverage_CI</span>
<span id="LC5" class="line" lang="cmake"> EXECUTABLE PROJECT</span>
<span id="LC6" class="line" lang="cmake"> DEPENDENCIES PROJECT</span>
<span id="LC7" class="line" lang="cmake"> GENHTML_ARGS -t <span class="s2">"PROJECT coverage"</span></span>
<span id="LC8" class="line" lang="cmake"><span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="38:1-38:26" dir="auto">
<a id="user-content-compileoptionscmake" class="anchor" href="#compileoptionscmake" aria-hidden="true"></a><code>compileoptions.cmake</code>
</h3>
<p data-sourcepos="39:1-39:26" dir="auto">Adds cmake compile options</p>
<ul data-sourcepos="40:1-48:0" dir="auto">
<li data-sourcepos="40:1-40:57">
<code>CMAKE_BUILD_MODULE_SYSTEM_INDEPENDENT</code>: setting r_path</li>
<li data-sourcepos="41:1-41:42">
<code>CMAKE_NETCDF_DIR</code>: separate netcdf path</li>
<li data-sourcepos="42:1-42:27">
<code>CMAKE_WITH_MPI</code>: use MPI</li>
<li data-sourcepos="43:1-43:33">
<code>CMAKE_WITH_OpenMP</code>: use OpenMP</li>
<li data-sourcepos="44:1-44:42">
<code>CMAKE_WITH_LAPACK</code>: use LAPACK bindings</li>
<li data-sourcepos="45:1-45:45">
<code>CMAKE_WITH_COVERAGE</code>: Coverage calculation</li>
<li data-sourcepos="46:1-46:129">
<code>CMAKE_WITH_GPROF</code>: gprof profiling information (see <a href="https://www.thegeekstuff.com/2012/08/gprof-tutorial/" rel="nofollow noreferrer noopener" target="_blank">here</a> for tutorial)</li>
<li data-sourcepos="47:1-48:0">will also search for <code>MPI</code>, <code>OpenMP</code> and <code>LAPACK</code> if the option are <code>ON</code>
</li>
</ul>
<p data-sourcepos="49:1-49:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="50:1-52:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>compileoptions<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="54:1-54:22" dir="auto">
<a id="user-content-findnetcdfcmake" class="anchor" href="#findnetcdfcmake" aria-hidden="true"></a><code>FindNetCDF.cmake</code>
</h3>
<p data-sourcepos="55:1-55:116" dir="auto">Copied from <a href="https://github.com/NOAA-EMC/CMakeModules/blob/develop/Modules/FindNetCDF.cmake" rel="nofollow noreferrer noopener" target="_blank">NOAA-EMC/CMakeModules</a>.</p>
<p data-sourcepos="57:1-57:17" dir="auto">Can be used like:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="58:1-61:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">find_package</span><span class="p">(</span>NetCDF COMPONENTS Fortran<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nb">target_link_libraries</span><span class="p">(</span><lib_name> PUBLIC NetCDF::NetCDF_Fortran<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="63:1-63:19" dir="auto">
<a id="user-content-versioncmake" class="anchor" href="#versioncmake" aria-hidden="true"></a><code>version.cmake</code>
</h3>
<p data-sourcepos="64:1-64:101" dir="auto">Provides a function to read version and date from a given files <code>version.txt</code> and <code>version-date.txt</code>.</p>
<p data-sourcepos="66:1-66:87" dir="auto">Can be included and used with (<code>PROJECT_VER_DEV</code> will hold the develop version string):</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="67:1-70:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>version<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">get_version</span><span class="p">(</span>PROJECT_VER PROJECT_VER_DEV PROJECT_DATE<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h2 data-sourcepos="72:1-72:20" dir="auto">
<a id="user-content-cmake-cache-files" class="anchor" href="#cmake-cache-files" aria-hidden="true"></a>Cmake Cache Files</h2>
<p data-sourcepos="74:1-75:77" dir="auto">Cache files provide templates for specific cmake setups.
Cmake can be controlled with such a file (<code>exampleFile</code>) in the following way</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="76:1-78:3" data-canonical-lang="bash" class="code highlight js-syntax-highlight language-shell" lang="shell" v-pre="true"><code><span id="LC1" class="line" lang="shell">cmake <span class="nt">-C</span> exampleFile ..</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="80:1-80:73" dir="auto">Have a look at the example files in <code>cmake-cache-files</code> taken from <code>mHM</code>.</p>2021-05-10T16:05:21+02:00Sebastian Müllerhttps://git.ufz.de/chs/cmake-fortran-scripts/-/tags/v1.1v1.1<h1 data-sourcepos="1:1-1:28" dir="auto">
<a id="user-content-cmake-fortran-scripts-v11" class="anchor" href="#cmake-fortran-scripts-v11" aria-hidden="true"></a>Cmake Fortran Scripts v1.1</h1>
<p data-sourcepos="3:1-3:61" dir="auto">Cmake scripts for Fortran Projects at CHS under LGPL License.</p>
<h2 data-sourcepos="5:1-5:16" dir="auto">
<a id="user-content-cmake-modules" class="anchor" href="#cmake-modules" aria-hidden="true"></a>Cmake Modules</h2>
<p data-sourcepos="7:1-8:37" dir="auto">Modules under <code>cmake-modules</code> provide different functions and macros
to be used in <code>CMakeLists.txt</code> files.</p>
<h3 data-sourcepos="10:1-10:36" dir="auto">
<a id="user-content-checkfortranpreprocessorcmake" class="anchor" href="#checkfortranpreprocessorcmake" aria-hidden="true"></a><code>checkfortranpreprocessor.cmake</code>
</h3>
<ul data-sourcepos="11:1-13:0" dir="auto">
<li data-sourcepos="11:1-11:98">
<code>get_preproc_flag</code>: checks for the pre-processor flag of the current compiler (<code>-fpp</code> or <code>-cpp</code>)</li>
<li data-sourcepos="12:1-13:0">
<code>cpp_definitions</code>: adds a compile definition and a corresponding cmake option</li>
</ul>
<p data-sourcepos="14:1-14:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="15:1-17:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>checkfortranpreprocessor<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="19:1-19:24" dir="auto">
<a id="user-content-codecoveragecmake" class="anchor" href="#codecoveragecmake" aria-hidden="true"></a><code>CodeCoverage.cmake</code>
</h3>
<p data-sourcepos="20:1-20:81" dir="auto">Taken from: <a href="https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake</a></p>
<p data-sourcepos="22:1-22:32" dir="auto">Can be included and set up with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="23:1-32:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CodeCoverage<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">append_coverage_compiler_flags</span><span class="p">()</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nf">SETUP_TARGET_FOR_COVERAGE_LCOV</span><span class="p">(</span></span>
<span id="LC4" class="line" lang="cmake"> NAME PROJECT_coverage_CI</span>
<span id="LC5" class="line" lang="cmake"> EXECUTABLE PROJECT</span>
<span id="LC6" class="line" lang="cmake"> DEPENDENCIES PROJECT</span>
<span id="LC7" class="line" lang="cmake"> GENHTML_ARGS -t <span class="s2">"PROJECT coverage"</span></span>
<span id="LC8" class="line" lang="cmake"><span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="34:1-34:26" dir="auto">
<a id="user-content-compileoptionscmake" class="anchor" href="#compileoptionscmake" aria-hidden="true"></a><code>compileoptions.cmake</code>
</h3>
<p data-sourcepos="35:1-35:26" dir="auto">Adds cmake compile options</p>
<ul data-sourcepos="36:1-43:0" dir="auto">
<li data-sourcepos="36:1-36:57">
<code>CMAKE_BUILD_MODULE_SYSTEM_INDEPENDENT</code>: setting r_path</li>
<li data-sourcepos="37:1-37:42">
<code>CMAKE_NETCDF_DIR</code>: separate netcdf path</li>
<li data-sourcepos="38:1-38:27">
<code>CMAKE_WITH_MPI</code>: use MPI</li>
<li data-sourcepos="39:1-39:33">
<code>CMAKE_WITH_OpenMP</code>: use OpenMP</li>
<li data-sourcepos="40:1-40:42">
<code>CMAKE_WITH_LAPACK</code>: use LAPACK bindings</li>
<li data-sourcepos="41:1-41:45">
<code>CMAKE_WITH_COVERAGE</code>: Coverage calculation</li>
<li data-sourcepos="42:1-43:0">will also search for <code>MPI</code>, <code>OpenMP</code> and <code>LAPACK</code> if the option are <code>ON</code>
</li>
</ul>
<p data-sourcepos="44:1-44:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="45:1-47:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>compileoptions<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="49:1-49:22" dir="auto">
<a id="user-content-findnetcdfcmake" class="anchor" href="#findnetcdfcmake" aria-hidden="true"></a><code>FindNetCDF.cmake</code>
</h3>
<p data-sourcepos="50:1-50:20" dir="auto">Find NetCDF package.</p>
<p data-sourcepos="52:1-52:17" dir="auto">Can be used with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="53:1-55:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">find_package</span><span class="p">(</span>NetCDF REQUIRED<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="57:1-57:17" dir="auto">
<a id="user-content-utilscmake" class="anchor" href="#utilscmake" aria-hidden="true"></a><code>utils.cmake</code>
</h3>
<p data-sourcepos="58:1-58:79" dir="auto">Based on: <a href="https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake</a></p>
<ul data-sourcepos="59:1-60:0" dir="auto">
<li data-sourcepos="59:1-60:0">handles <code>fypp</code> pre-processor</li>
</ul>
<p data-sourcepos="61:1-61:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="62:1-64:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>utils<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="66:1-66:19" dir="auto">
<a id="user-content-versioncmake" class="anchor" href="#versioncmake" aria-hidden="true"></a><code>version.cmake</code>
</h3>
<p data-sourcepos="67:1-67:101" dir="auto">Provides a function to read version and date from a given files <code>version.txt</code> and <code>version-date.txt</code>.</p>
<p data-sourcepos="69:1-69:87" dir="auto">Can be included and used with (<code>PROJECT_VER_DEV</code> will hold the develop version string):</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="70:1-73:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>version<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">get_version</span><span class="p">(</span>PROJECT_VER PROJECT_VER_DEV PROJECT_DATE<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h2 data-sourcepos="75:1-75:20" dir="auto">
<a id="user-content-cmake-cache-files" class="anchor" href="#cmake-cache-files" aria-hidden="true"></a>Cmake Cache Files</h2>
<p data-sourcepos="77:1-78:77" dir="auto">Cache files provide templates for specific cmake setups.
Cmake can be controlled with such a file (<code>exampleFile</code>) in the following way</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="79:1-81:3" data-canonical-lang="bash" class="code highlight js-syntax-highlight language-shell" lang="shell" v-pre="true"><code><span id="LC1" class="line" lang="shell">cmake <span class="nt">-C</span> exampleFile ..</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="83:1-83:73" dir="auto">Have a look at the example files in <code>cmake-cache-files</code> taken from <code>mHM</code>.</p>2021-03-31T00:16:36+02:00Sebastian Müllerhttps://git.ufz.de/chs/cmake-fortran-scripts/-/tags/v1.0v1.0<h1 data-sourcepos="1:1-1:28" dir="auto">
<a id="user-content-cmake-fortran-scripts-v10" class="anchor" href="#cmake-fortran-scripts-v10" aria-hidden="true"></a>Cmake Fortran Scripts v1.0</h1>
<p data-sourcepos="3:1-3:41" dir="auto">Cmake scripts for Fortran Projects at CHS</p>
<h2 data-sourcepos="5:1-5:16" dir="auto">
<a id="user-content-cmake-modules" class="anchor" href="#cmake-modules" aria-hidden="true"></a>Cmake Modules</h2>
<p data-sourcepos="7:1-8:37" dir="auto">Modules under <code>cmake-modules</code> provide different functions and macros
to be used in <code>CMakeLists.txt</code> files.</p>
<h3 data-sourcepos="10:1-10:36" dir="auto">
<a id="user-content-checkfortranpreprocessorcmake" class="anchor" href="#checkfortranpreprocessorcmake" aria-hidden="true"></a><code>checkfortranpreprocessor.cmake</code>
</h3>
<ul data-sourcepos="11:1-13:0" dir="auto">
<li data-sourcepos="11:1-11:98">
<code>get_preproc_flag</code>: checks for the pre-processor flag of the current compiler (<code>-fpp</code> or <code>-cpp</code>)</li>
<li data-sourcepos="12:1-13:0">
<code>cpp_definitions</code>: adds a compile definition and a corresponding cmake option</li>
</ul>
<p data-sourcepos="14:1-14:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="15:1-17:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>checkfortranpreprocessor<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="19:1-19:24" dir="auto">
<a id="user-content-codecoveragecmake" class="anchor" href="#codecoveragecmake" aria-hidden="true"></a><code>CodeCoverage.cmake</code>
</h3>
<p data-sourcepos="20:1-20:81" dir="auto">Taken from: <a href="https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake</a></p>
<p data-sourcepos="22:1-22:32" dir="auto">Can be included and set up with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="23:1-32:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>CodeCoverage<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">append_coverage_compiler_flags</span><span class="p">()</span></span>
<span id="LC3" class="line" lang="cmake"><span class="nf">SETUP_TARGET_FOR_COVERAGE_LCOV</span><span class="p">(</span></span>
<span id="LC4" class="line" lang="cmake"> NAME PROJECT_coverage_CI</span>
<span id="LC5" class="line" lang="cmake"> EXECUTABLE PROJECT</span>
<span id="LC6" class="line" lang="cmake"> DEPENDENCIES PROJECT</span>
<span id="LC7" class="line" lang="cmake"> GENHTML_ARGS -t <span class="s2">"PROJECT coverage"</span></span>
<span id="LC8" class="line" lang="cmake"><span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="34:1-34:26" dir="auto">
<a id="user-content-compileoptionscmake" class="anchor" href="#compileoptionscmake" aria-hidden="true"></a><code>compileoptions.cmake</code>
</h3>
<p data-sourcepos="35:1-35:26" dir="auto">Adds cmake compile options</p>
<ul data-sourcepos="36:1-43:0" dir="auto">
<li data-sourcepos="36:1-36:57">
<code>CMAKE_BUILD_MODULE_SYSTEM_INDEPENDENT</code>: setting r_path</li>
<li data-sourcepos="37:1-37:42">
<code>CMAKE_NETCDF_DIR</code>: separate netcdf path</li>
<li data-sourcepos="38:1-38:27">
<code>CMAKE_WITH_MPI</code>: use MPI</li>
<li data-sourcepos="39:1-39:33">
<code>CMAKE_WITH_OpenMP</code>: use OpenMP</li>
<li data-sourcepos="40:1-40:42">
<code>CMAKE_WITH_LAPACK</code>: use LAPACK bindings</li>
<li data-sourcepos="41:1-41:45">
<code>CMAKE_WITH_COVERAGE</code>: Coverage calculation</li>
<li data-sourcepos="42:1-43:0">will also search for <code>MPI</code>, <code>OpenMP</code> and <code>LAPACK</code> if the option are <code>ON</code>
</li>
</ul>
<p data-sourcepos="44:1-44:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="45:1-47:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>compileoptions<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="49:1-49:22" dir="auto">
<a id="user-content-findnetcdfcmake" class="anchor" href="#findnetcdfcmake" aria-hidden="true"></a><code>FindNetCDF.cmake</code>
</h3>
<p data-sourcepos="50:1-50:20" dir="auto">Find NetCDF package.</p>
<p data-sourcepos="52:1-52:17" dir="auto">Can be used with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="53:1-55:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">find_package</span><span class="p">(</span>NetCDF REQUIRED<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="57:1-57:17" dir="auto">
<a id="user-content-utilscmake" class="anchor" href="#utilscmake" aria-hidden="true"></a><code>utils.cmake</code>
</h3>
<p data-sourcepos="58:1-58:79" dir="auto">Based on: <a href="https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake" rel="nofollow noreferrer noopener" target="_blank">https://github.com/fortran-lang/stdlib/blob/master/cmake/stdlib.cmake</a></p>
<ul data-sourcepos="59:1-60:0" dir="auto">
<li data-sourcepos="59:1-60:0">handles <code>fypp</code> pre-processor</li>
</ul>
<p data-sourcepos="61:1-61:21" dir="auto">Can be included with:</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="62:1-64:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>utils<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h3 data-sourcepos="66:1-66:19" dir="auto">
<a id="user-content-versioncmake" class="anchor" href="#versioncmake" aria-hidden="true"></a><code>version.cmake</code>
</h3>
<p data-sourcepos="67:1-67:101" dir="auto">Provides a function to read version and date from a given files <code>version.txt</code> and <code>version-date.txt</code>.</p>
<p data-sourcepos="69:1-69:87" dir="auto">Can be included and used with (<code>PROJECT_VER_DEV</code> will hold the develop version string):</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="70:1-73:3" data-canonical-lang="cmake" class="code highlight js-syntax-highlight language-cmake" lang="cmake" v-pre="true"><code><span id="LC1" class="line" lang="cmake"><span class="nb">include</span><span class="p">(</span>version<span class="p">)</span></span>
<span id="LC2" class="line" lang="cmake"><span class="nf">get_version</span><span class="p">(</span>PROJECT_VER PROJECT_VER_DEV PROJECT_DATE<span class="p">)</span></span></code></pre>
<copy-code></copy-code>
</div>
<h2 data-sourcepos="75:1-75:20" dir="auto">
<a id="user-content-cmake-cache-files" class="anchor" href="#cmake-cache-files" aria-hidden="true"></a>Cmake Cache Files</h2>
<p data-sourcepos="77:1-78:77" dir="auto">Cache files provide templates for specific cmake setups.
Cmake can be controlled with such a file (<code>exampleFile</code>) in the following way</p>
<div class="gl-relative markdown-code-block js-markdown-code">
<pre data-sourcepos="79:1-81:3" data-canonical-lang="bash" class="code highlight js-syntax-highlight language-shell" lang="shell" v-pre="true"><code><span id="LC1" class="line" lang="shell">cmake <span class="nt">-C</span> exampleFile ..</span></code></pre>
<copy-code></copy-code>
</div>
<p data-sourcepos="83:1-83:73" dir="auto">Have a look at the example files in <code>cmake-cache-files</code> taken from <code>mHM</code>.</p>2021-03-31T00:11:47+02:00Sebastian Müller