---
name: "ExtUtils::CppGuess"
section: "3pm"
platform: "linux"
package: "perl-extutils-cppguess"
version: "0.271-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/ExtUtils::CppGuess"
---

# ExtUtils::CppGuess(3pm)

guess C++ compiler and flags

## NAME

ExtUtils::CppGuess - guess C++ compiler and flags

## SYNOPSIS

With Extutils::MakeMaker:

```
    use ExtUtils::CppGuess;
    my $guess = ExtUtils::CppGuess->new;
    WriteMakefile
      ( # MakeMaker args,
        $guess->makemaker_options,
        );
```

With Module::Build:

```
    my $guess = ExtUtils::CppGuess->new;
    my $build = Module::Build->new
      ( # Module::Build arguments
        $guess->module_build_options,
        );
    $build->create_build_script;
```

## DESCRIPTION

`"ExtUtils::CppGuess"` attempts to guess the system's C++ compiler that is compatible with the C compiler that your perl was built with.

It can generate the necessary options to the Module::Build constructor or to ExtUtils::MakeMaker's `"WriteMakefile"` function.

## ENVIRONMENT

As of 0.24, the environment variable `"CXX"` defines the obvious value, and will be used instead of any detection. Supplied arguments to "new" will still win.

## METHODS

### new

Creates a new `"ExtUtils::CppGuess"` object. Takes the path to the C compiler as the `"cc"` argument, but falls back to the value of `$Config{cc}`, which should be what you want anyway.

You can specify `"extra_compiler_flags"` and `"extra_linker_flags"` (as strings) which will be merged in with the auto-detected ones.

### module\_build\_options

Returns the correct options to the constructor of `"Module::Build"`. These are:

```
    extra_compiler_flags
    extra_linker_flags
    config => { cc => ... }, # as of 0.15
```

Please note the above may have problems on Perl \<= 5.8 with ExtUtils::CBuilder \<= 0.280230 due to a Perl RE issue.

### makemaker\_options

Returns the correct options to the `"WriteMakefile"` function of `"ExtUtils::MakeMaker"`. These are:

```
    CCFLAGS
    dynamic_lib => { OTHERLDFLAGS => ... }
    CC # as of 0.15
```

If you specify the extra compiler or linker flags in the constructor, they'll be merged into `"CCFLAGS"` or `"OTHERLDFLAGS"` respectively.

### is\_gcc

Returns true if the detected compiler is in the gcc family.

### is\_msvc

Returns true if the detected compiler is in the MS VC family.

### is\_clang

Returns true if the detected compiler is in the Clang family.

### is\_sunstudio

Returns true if the detected compiler is in the Sun Studio family.

### add\_extra\_compiler\_flags

Takes a string as argument that is added to the string of extra compiler flags.

### add\_extra\_linker\_flags

Takes a string as argument that is added to the string of extra linker flags.

### compiler\_command

Returns the string that can be passed to `"system"` to execute the compiler. Will include the flags returned as the Module::Build `"extra_compiler_flags"`.

Added in 0.13.

### linker\_flags

The same as returned as the Module::Build `"extra_linker_flags"`.

Added in 0.13.

### iostream\_fname

Returns the filename to `"#include"` to get iostream capability.

This can be used a bit creatively to be portable in one's XS files, as the tests for this module need to be:

```
  # in Makefile.PL:
  $guess->add_extra_compiler_flags(
    '-DINCLUDE_DOT=' .
    ($guess->iostream_fname =~ /\./ ? 1 : 0)
  );
  // in your .xs file:
  #if INCLUDE_DOT
  #include <string.h>
  #else
  #include <string>
  #endif
```

Added in 0.15.

### cpp\_flavor\_defs

Returns the text for a header that `"#define"`s `"__INLINE_CPP_STANDARD_HEADERS"` and `"__INLINE_CPP_NAMESPACE_STD"` if the standard headers and namespace are available. This is determined by trying to compile C++ with `"#define <iostream>"` - if it succeeds, the symbols will be defined, else commented.

Added in 0.15.

### cpp\_standard\_flag

```
  $guess->cpp_standard_flag( $standard_name )
```

Given a string `$standard_name` that is currently one of

- •

  `"C++98"`

- •

  `"C++11"`

- •

  `"C++14"`

- •

  `"C++17"`

- •

  `"C++20"`

- •

  `"C++23"`

returns a string with a flag that can be used to tell the compiler to support that version of the C++ standard or dies if version is not supported.

Added in version v0.22.

## AUTHOR

Mattia Barbon \<mbarbon@cpan.org\>

Steffen Mueller \<smueller@cpan.org\>

Tobias Leich \<froggs@cpan.org\>

## COPYRIGHT AND LICENSE

Copyright 2010, 2011 by Mattia Barbon.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
