Skip to main content

5 posts tagged with "cmake"

View All Tags

Automated Testing for Seamless CMake Config File Integration

· 13 min read
Christopher McArthur
C++ DevOps Expert

As a C++ developer, ensuring your library integrates flawlessly with other projects is crucial for driving adoption. CMake being the defacto standard plays a vital role in this process by providing installed configuration files; guiding consumers on how to find and utilize your library using find_package. But how do you guarantee these config files are installed correctly and provide all the necessary information? Enter automated testing!

This blog post explores an approach for testing CMake config files inspired by Behavioral Driven Development practices and showcases a powerful implementation on GitHub Actions featuring 14+ test cases.

Why Test CMake Config Files?

Imagine creating a fantastic C++ library, only to have users encounter missing headers or library paths when they attempt to integrate it within their builds. This very real headache is why many open-source developers have opted for header-only libraries. "Just copying the headers" eventually became the norm. However, this trend has culminated in ballooned build times, as the preprocessing stage can become a bottleneck.

Unlock Efficiency & Innovation in C++ Development: Building More Configuration than You Ship

· 4 min read
Christopher McArthur
C++ DevOps Expert

In the steadily evolving landscape of C++, where incremental improvements shape the tools we use, it can quickly become a challenge to stay up to date with the latest technologies while still supporting the code already in production. If you're apart of the 61% of C++ developers, the concept of building more configurations might initially seem counterintuitive. However, it's precisely under such circumstances that this approach serves as a solution to the challenge of limited access to new features and tools within the C++ ecosystem.

By prioritizing testing a comprehensive list of configuration during CI, your team can unleash access to new features and tools, boosting productivity and ensuring project longevity and compatibility in a competitive landscape by establishing guardrails for the project.

Let's delve deeper into the compelling reasons why this DevOps approach, centered around building more configurations, deserves widespread adoption in C++ environments.

Optimizing CI Build Scripts and Enhancing Developer Experience with CMake Presets

· 7 min read
Christopher McArthur
C++ DevOps Expert

Managing build scripts, especially in C++, can be a daunting task for development teams. CMake, with its powerful toolkit, offers a solution to this challenge. In this blog, we'll delve into the world of CMake presets and explore how they can significantly reduce CI build script complexity, leading to a more efficient and enjoyable development experience.

The Challenge of Build Scripts in C++

C++ teams often struggle with an extensive list of build systems, introducing layers of complexity. CMake, when mastered, becomes a game-changer. This blog focuses on CMake's key pillars: toolchains, presets, and build scripts. Understanding their roles and interactions is crucial for achieving a streamlined developer experience and unambiguous CI workflows.

Join us on a journey where we'll:

  • Empower developers with effortless configuration and cross-platform builds.
  • Simplify CI pipelines for efficient testing.
  • Elevate project maintainability and collaboration across diverse environments.

From Scratch to Scalable: Seamless CI for C++ Windows Build Infrastructure with Ansible and Terraform

· 10 min read
Christopher McArthur
C++ DevOps Expert

One of the biggest challenges in C++ is setting up CI from scratch and of that, the biggest pain point is the system administration which can be very disconnected from the development tools. In order to bridge this gap we can leverage Infrastructure as Code (IaC) targeting existing machines, locally in our network or in the cloud, is an excellent enhancement to ensure consistent reproducible builds. Having version controlled configuration management tied to the codebase is key, this will allow us to deterministically install all the tools required with confidence even in the far far future.

Let's walk through adding Ansible to handle configuring a Windows virtual machine. These ideas apply to Unix environments as well but we can tackle those in a future post. Once we've gained control over our build environments, we can tackle availability and scalability by introducing Terraform to help provision and initialize new Windows instances in Azure. This two prong solution enables both a path for migrating to the cloud and establishing a hybrid setup.

Unveiling the Power of C++ DevOps: Bridging Disciplines for Seamless Development

· 4 min read
Christopher McArthur
C++ DevOps Expert

In the ever-evolving landscape of software development, the transformative influence of DevOps cannot be overstated. It has reshaped how teams collaborate, develop, build, test, and ultimately deliver applications. DevOps is more than a mere collection of practices or tools; it embodies a cultural shift, fostering collaboration and communication among software developers, QA professionals, and IT operations.

Today, we navigate the intricate landscape of C++, delving into how the DevOps approach aligns seamlessly with both historical and contemporary roles within the ecosystem. It becomes apparent that DevOps best practices hold the key to unlocking solutions for some of the most prevalent challenges faced by C++ developers.