<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cpp on ISciNumPy.dev</title><link>https://iscinumpy.dev/tags/cpp/</link><description>Recent content in Cpp on ISciNumPy.dev</description><generator>Hugo</generator><language>en-us</language><managingEditor>henryfs@princeton.edu (Henry Schreiner)</managingEditor><webMaster>henryfs@princeton.edu (Henry Schreiner)</webMaster><lastBuildDate>Fri, 22 May 2026 10:02:17 -0400</lastBuildDate><atom:link href="https://iscinumpy.dev/tags/cpp/index.xml" rel="self" type="application/rss+xml"/><item><title>C++23</title><link>https://iscinumpy.dev/post/cpp-23/</link><pubDate>Mon, 23 Oct 2023 11:00:00 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/cpp-23/</guid><description>&lt;!-- rumdl-disable-file MD024 --&gt;
&lt;p&gt;C++23 is complete and pretty much finalized, so let&amp;rsquo;s explore the new features
in C++, from a data science point of view. This is not as large of a release as
C++20 or C++11, but it&amp;rsquo;s still a hefty release with lots of nice new features -
larger than C++17.&lt;/p&gt;
&lt;p&gt;Some of the major new features are building on themes from C++20, such as vastly
expanded ranges and views, more &lt;code&gt;constexpr&lt;/code&gt;/&lt;code&gt;consteval&lt;/code&gt;, module support for the
standard library, &lt;code&gt;std::print&lt;/code&gt; to supplement &lt;code&gt;std::format&lt;/code&gt;, and a
&lt;code&gt;std::generator&lt;/code&gt; to support coroutines. There are also several general features,
lambdas and classes get along much better now, there are new preprocessor
additions (!), a stacktrace library, flat maps/sets, and new &lt;code&gt;std::optional&lt;/code&gt;
monadics, deducing &lt;code&gt;this&lt;/code&gt;, and many various additions.&lt;/p&gt;</description></item><item><title>Announcing CLI11 2.0</title><link>https://iscinumpy.dev/post/announcing-cli11-20/</link><pubDate>Wed, 14 Jul 2021 14:34:02 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/announcing-cli11-20/</guid><description>&lt;p&gt;&lt;a href="https://github.com/CLIUtils/CLI11"&gt;CLI11&lt;/a&gt;, a powerful library for writing beautiful command line interfaces in
C++11, has &lt;a href="https://github.com/CLIUtils/CLI11/releases/tag/v2.0.0"&gt;been updated to 2.0&lt;/a&gt;. A lot of deprecated things have been
removed, and there was a lot of cleanup under-the-hood; making CLI11 simpler. A
few defaults have changed slightly, like better TOML support by default.&lt;/p&gt;
&lt;p&gt;CLI11 does a better job than ever understanding any sort of container you
provide - complex numbers are natively supported, along with atomic types. A
long requested feature, simple version flags, has been added. Subcommands are
more customizable. And there have been quite a few bugfixes for rare issues.&lt;/p&gt;</description></item><item><title>C++20</title><link>https://iscinumpy.dev/post/cpp-20/</link><pubDate>Sat, 20 Jul 2019 22:42:21 -0400</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/cpp-20/</guid><description>&lt;p&gt;The final meeting for new features in C++ is over, so let&amp;rsquo;s explore the new
features in C++, from a data science point of view. This is the largest release
of C++ since C++11, and when you consider C++14 and C++17 to be interim
releases, the entire 9 year cycle is possibly the largest yet! It may not feel
quite as massive as C++11, since we didn&amp;rsquo;t have interim releases for C++11 and
because C++11 is a much more complete, useful language than C++03, but this is
still a really impactful release! This is also the first version to include
every major feature from Bjarne Stroustrup&amp;rsquo;s &amp;ldquo;The design and Evolution of C++&amp;rdquo;,
also known as D&amp;amp;E, from 1994!&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s look at the major new features, as well as collections of smaller ones.&lt;/p&gt;</description></item><item><title>Binding Minuit2</title><link>https://iscinumpy.dev/post/binding-minuit2/</link><pubDate>Sat, 07 Jul 2018 21:00:00 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/binding-minuit2/</guid><description>&lt;p&gt;Let&amp;rsquo;s try a non-trivial example of a binding: Minuit2 (6.14.0 standalone
edition).&lt;/p&gt;</description></item><item><title>Tools to Bind to Python</title><link>https://iscinumpy.dev/post/tools-to-bind-to-python/</link><pubDate>Sat, 07 Jul 2018 21:00:00 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/tools-to-bind-to-python/</guid><description>&lt;p&gt;This was originally given as a PyHEP 2018 talk, It is designed to be
interactive, and can be run in SWAN if you have a CERN account. If you want to
run it manually, just download the repository:
&lt;a href="https://github.com/henryiii/pybindings_cc"&gt;github.com/henryiii/pybindings_cc&lt;/a&gt;.
It is easy to run in Anaconda.&lt;/p&gt;</description></item><item><title>Announcing CLI11 1.6</title><link>https://iscinumpy.dev/post/announcing-cli11-16/</link><pubDate>Wed, 27 Jun 2018 14:44:40 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/announcing-cli11-16/</guid><description>&lt;p&gt;&lt;a href="https://github.com/CLIUtils/CLI11"&gt;CLI11&lt;/a&gt;, a powerful library for writing beautiful command line interfaces in
C++11, has &lt;a href="https://github.com/CLIUtils/CLI11/releases"&gt;been updated to 1.6&lt;/a&gt;, the largest update ever. CLI11
output is more customizable than ever, and has a better functionality separation
under the hood.&lt;/p&gt;
&lt;p&gt;CLI11 has had the formatting system completely redesigned, with minor or
complete customization of the output possible. Configuration files reading and
writing also can be configured; a new example with json instead of ini
formatting is included. Validators (finally) have custom help output, as well.
Many odd corner cases have been made possible, such as interleaving options.&lt;/p&gt;</description></item><item><title>Announcing GooFit 2.1</title><link>https://iscinumpy.dev/post/announcing-goofit-21/</link><pubDate>Thu, 07 Dec 2017 03:20:00 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/announcing-goofit-21/</guid><description>&lt;!-- prettier-ignore-start --&gt;
&lt;p class="white"&gt;&lt;img src="https://iscinumpy.dev/images/post/2017/GooFitLogo21small.png" alt="GooFit logo"&gt;&lt;/p&gt;
&lt;!-- prettier-ignore-end --&gt;
&lt;p&gt;GooFit 2.1 introduces the full-featured Python bindings to GooFit. These
bindings mimic the C++ usage of GooFit, including bindings for all PDFs, and
also provide NumPy-centric conversions, live Jupyter notebook printing, pip
install, and more. Most of the examples in C++ are provided in Python form, as
well.&lt;/p&gt;
&lt;p&gt;Several other API changes were made. Observables are now distinguished from
Variables and provided as a separate class. Both these classes are now passed
around by copy everywhere.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; The three and four body amplitude classes have
been refactored and simplified. OpenMP is now supported via homebrew on macOS;
GooFit is one of the only packages that currently can build with OpenMP on the
default macOS compiler. Eigen is now available, and &lt;a href="https://github.com/CLIUtils/CLI11"&gt;CLI11&lt;/a&gt; has been updated to
version 1.3.&lt;/p&gt;
&lt;p&gt;GooFit 2.1 will receive continuing support while development on GooFit 2.2
presses on with a new indexing scheme for PDFs.&lt;/p&gt;</description></item><item><title>Include What You Use</title><link>https://iscinumpy.dev/post/include-what-you-use/</link><pubDate>Tue, 05 Dec 2017 14:06:35 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/include-what-you-use/</guid><description>&lt;p&gt;Include-what-you-use is a promising little tool for cleaning up a codebase. It
didn&amp;rsquo;t end up working for the use I had for it, but it still could be useful.
Here is a quick guideline on installing it on macOS.&lt;/p&gt;</description></item><item><title>Comparing CLI11 and Boost PO</title><link>https://iscinumpy.dev/post/comparing-cli11-and-boostpo/</link><pubDate>Sun, 03 Dec 2017 16:31:50 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/comparing-cli11-and-boostpo/</guid><description>&lt;p&gt;CLI11 started years ago as a set of tools built on Boost Program Options (PO),
and has since matured into the powerful, easy-to-use stand-alone library it is
available today. If you would like to see the original inspiration for CLI11,
look at
&lt;a href="https://github.com/CLIUtils/CLI11/blob/v0.1/include/Program.hpp"&gt;Program.hpp in CLI11 0.1&lt;/a&gt;.
The rest of the post will focus on a comparison between making a CLI app in the
two libraries. I am going to assume that you are preparing fairly basic but
non-trivial programs in the following comparison.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; CLI11 is more concise, and provides more control with better defaults
in many cases, but was inspired by Boost PO.&lt;/p&gt;</description></item><item><title>Announcing CLI11 1.3</title><link>https://iscinumpy.dev/post/announcing-cli11-13/</link><pubDate>Fri, 01 Dec 2017 09:03:50 -0500</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/announcing-cli11-13/</guid><description>&lt;p&gt;&lt;a href="https://github.com/CLIUtils/CLI11"&gt;CLI11&lt;/a&gt;, a powerful library for writing beautiful command line interfaces in
C++11, has &lt;a href="https://github.com/CLIUtils/CLI11/releases"&gt;been updated to 1.3&lt;/a&gt;, the largest update ever. CLI11 is
more powerful than ever, and has simpler and more consistent parsing under the
hood.&lt;/p&gt;
&lt;p&gt;This version focused on refactoring several key systems to ensure correct
behavior in the interaction of different settings. Most caveats about features
only working on the main App have been addressed, and extra arguments have been
reworked. Inheritance of defaults makes configuring CLI11 much easier without
having to subclass. Policies add new ways to handle multiple arguments to match
your favorite CLI programs. Error messages and help messages are better and more
flexible. Several bugs and odd behaviors in the parser have been fixed.&lt;/p&gt;</description></item><item><title>Announcing GooFit 2.0</title><link>https://iscinumpy.dev/post/announcing-goofit-20/</link><pubDate>Thu, 08 Jun 2017 17:54:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/announcing-goofit-20/</guid><description>&lt;p&gt;The next version of the premier CUDA/OpenMP fitting program for HEP analysis,
GooFit 2.0, &lt;a href="GooFit"&gt;has been released&lt;/a&gt;. GooFit is now easy to build on a wide
variety of Unix systems, and supports debuggers and IDEs. GooFit is faster, has
unit tests, and working examples. More PDFs and examples have been added, as
well as newly released example datasets that are downloaded automatically.
GooFit now has built in support for MPI, and can use that to deploy to multiple
graphics cards on the same machine. A new command line parser (&lt;a href="https://github.com/CLIUtils/CLI11"&gt;CLI11&lt;/a&gt;) and
drastically improved logging and errors have made code easier to write and
debug. Usage of GooFit specific terminology is now reduced, using standard
Thrust or CUDA terms when possible, lowering the barrier for new developers. A
new Python script has been added to assist users converting from pre 2.0 code.&lt;/p&gt;
&lt;p&gt;The file structure of GooFit and the build system have been completely revamped.
The fake &lt;code&gt;nvcc&lt;/code&gt; features have been removed, as have the &lt;code&gt;rootstuff&lt;/code&gt; copies of
ROOT classes. PDFs are now organized by type and compile and link separately.
Multiple PDF caching support has improved. The build system now uses CMake and
manages external libraries.&lt;/p&gt;
&lt;p&gt;A new feature of the CMake build system is GooFit Packages, which are complete
packages that can be added to GooFit and built, allowing analysis code to live
in a separate location from GooFit, rather than the old method of simply forking
GooFit and adding your analysis manually. A GooFit Package can be made into an
example trivially. See &lt;a href="https://github.com/maddocbf/goofit_KKPiPi"&gt;this package&lt;/a&gt;
for an example.&lt;/p&gt;
&lt;p&gt;GooFit 2.0 will receive continuing support while development on GooFit 2.1
presses on.&lt;/p&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/GooFit/GooFit"&gt;GooFit on GitHub&lt;/a&gt; • &lt;a href="https://GooFit.github.io"&gt;GooFit webpage&lt;/a&gt; • &lt;a href="https://GooFit.github.io/GooFit"&gt;API documentation&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Announcing CLI11 Version 1.0</title><link>https://iscinumpy.dev/post/announcing-cli11-10/</link><pubDate>Thu, 01 Jun 2017 14:05:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/announcing-cli11-10/</guid><description>&lt;p&gt;CLI11, a powerful library for writing command line interfaces in C++11, has just
been released. There are no requirements beyond C++11 support (and even
&lt;code&gt;&amp;lt;regex&amp;gt;&lt;/code&gt; support not required). It works on Mac, Linux, and Windows, and has
100% test coverage on all three systems. You can simply drop in a single header
file (&lt;code&gt;CLI11.hpp&lt;/code&gt; available in &lt;a href="https://github.com/CLIUtils/CLI11/releases"&gt;releases&lt;/a&gt;) to use CLI11 in your own application.
Other ways to integrate it into a build system are listed in the &lt;a href="https://github.com/CLIUtils/CLI11/blob/master/README.md"&gt;README&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The library was inspired the Python libraries &lt;a href="http://plumbum.readthedocs.io/en/latest/"&gt;Plumbum&lt;/a&gt; and &lt;a href="http://click.pocoo.org/5/"&gt;Click&lt;/a&gt;, and
incorporates many of their user friendly features. The library is extensively
documented, with a &lt;a href="https://github.com/CLIUtils/CLI11/blob/master/README.md"&gt;friendly introduction&lt;/a&gt;, a tutorial filled (in
progress) &lt;a href="https://cliutils.gitlab.io/CLI11"&gt;GitBook&lt;/a&gt;, and more technical &lt;a href="https://cliutils.github.io/CLI11"&gt;API docs&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Perfect forwarding for methods</title><link>https://iscinumpy.dev/post/perfect-forwarding-for-methods/</link><pubDate>Fri, 17 Mar 2017 10:43:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/perfect-forwarding-for-methods/</guid><description>&lt;p&gt;I often see perfect forwarding listed for constructor arguments, but not usually
for functions with a return or methods. Here is my solution for an method method
of class &lt;code&gt;Cls&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;typename&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Cls&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Args&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;typename&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;result_of&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;decltype&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Cls&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;Cls&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="p"&gt;...)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;::&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;forward&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Args&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)...);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is useful if you want to call protected classes from a “helper” friend
class, for example, to expose them to tests without having to require
GoogleTest/GoogleMock to be available for regular users.&lt;/p&gt;</description></item><item><title>C++17</title><link>https://iscinumpy.dev/post/cpp-17/</link><pubDate>Sat, 10 Sep 2016 08:30:00 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/cpp-17/</guid><description>&lt;p&gt;The every-three-year cycle has changed the development of C++; we are now
getting consistent releases somewhere in-between the major and minor releases of
old. The 2017 release may be called minor by some, with a huge portion of the
planned improvements being pushed back another 3-6 years, but there were several
substantial changes in useful areas; it is much more impactful than C++14, for
example. This almost feels like a lead-in release to C++20.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;std::variant&lt;/code&gt;, &lt;code&gt;std::optional&lt;/code&gt;, and &lt;code&gt;std::any&lt;/code&gt; additions to the standard
library are huge, and can restructure the way you program (and are available for
older C++ releases through Boost and other libraries).&lt;/p&gt;</description></item><item><title>C++14</title><link>https://iscinumpy.dev/post/cpp-14/</link><pubDate>Fri, 09 Sep 2016 08:30:00 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/cpp-14/</guid><description>&lt;p&gt;Unlike C++11, this is a minor release, focused mostly on improvements on top of
C++11 changes, with very little that one could call &amp;ldquo;new&amp;rdquo;. C++14 feels a little
more natural than C++11 by expanding the usage of features and implementing
common sense additions that were missed in the original C++11 release. There
were also quite a few bug fixes; several of these were backported into C++11
mode in compilers.&lt;/p&gt;
&lt;p&gt;Also, while C++11 is always available in ROOT 6, C++14 requires a flag and
compatible compiler, so C++14 features are often unavailable. The Conda-Forge
ROOT package has C++17 enabled.&lt;/p&gt;</description></item><item><title>C++11</title><link>https://iscinumpy.dev/post/cpp-11/</link><pubDate>Thu, 08 Sep 2016 08:30:00 +0200</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/cpp-11/</guid><description>&lt;p&gt;C++11 was the largest change ever made to C++; and due to the changed release
schedule, probably will remain the largest single change. It is a well thought
out, mostly backward-compatible change that can cause you to completely rethink
the way you write code in C++. It is best thought of as almost a new language, a
sort of (C++)++ language. There are too many changes to list here, and there are
excellent resources available, so this is meant to just give you a taste of some
of the most useful changes.&lt;/p&gt;
&lt;p&gt;Many of the features work best together, or are related. There already are great
resources for learning about C++11 (listed at the bottom of this lesson), and
C++11 is already in use in most software. Therefore, the remainder of this
lesson will cover a few of the common idioms in C++11 that a programmer
experienced with the older C++ might not immediately think of.&lt;/p&gt;</description></item><item><title>GoogleTest and CMake</title><link>https://iscinumpy.dev/post/googletest-and-cmake/</link><pubDate>Fri, 25 Mar 2016 16:12:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/googletest-and-cmake/</guid><description>&lt;p&gt;This is a quick recipe for setting up CMake to use googletest in your projects.
First, make a &lt;code&gt;tests&lt;/code&gt; folder in the root of your project. Then, add
&lt;code&gt;add_subdirectory(tests)&lt;/code&gt; to your &lt;code&gt;CMakeLists.txt&lt;/code&gt;, after you&amp;rsquo;ve finished adding
the libraries in your project. Note that the way I&amp;rsquo;ve written this probably
requires CMake 3.4+.&lt;/p&gt;</description></item><item><title>GTest Submodule</title><link>https://iscinumpy.dev/post/gtest-submodule/</link><pubDate>Wed, 07 Oct 2015 06:43:00 -0700</pubDate><author>henryfs@princeton.edu (Henry Schreiner)</author><guid>https://iscinumpy.dev/post/gtest-submodule/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Note: There is a better way to do this described
&lt;a href="https://iscinumpy.dev/post/googletest-and-cmake"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you&amp;rsquo;ve ever tried &lt;code&gt;apt-get&lt;/code&gt; or &lt;code&gt;brew&lt;/code&gt; to try to install gtest, you are
probably familiar with the fact that gtest is not &amp;ldquo;recommend&amp;rdquo; for global install
on your system. As an alternative, the recommendation is that you make it part
of your project. The process for making gtest part of your project, however, is
not well documented, at least for modern git projects. What follows is the
procedure I used to do so.&lt;/p&gt;</description></item></channel></rss>