ExtUtils::CppGuess(3)

✨ NAME ✨

okay so welcome to the ExtUtils::CppGuess(3) page, bestie β€” it’s from the User Contributed Perl Documentation, and the whole vibe is literally:

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. no cap, that’s the whole mission 🫢

It can generate the necessary options to the Module::Build constructor or to ExtUtils::MakeMaker’s WriteMakefile function. iconic behavior, honestly ✨


🌈 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. periodt πŸ’…


πŸ¦‹ 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. slay πŸ”₯

You can specify extra_compiler_flags and extra_linker_flags (as strings) which will be merged in with the auto-detected ones. cute AND useful πŸ’–

πŸ’« 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
heads up bestie: 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. iykyk 🧚

πŸ“ 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. stack those flags, bestie 🫢

πŸŽ€ add_extra_linker_flags

Takes a string as argument that is added to the string of extra linker flags. same energy, linker edition πŸ’…

⭐ 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 #defines __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 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.


πŸ’… that’s the whole page, bestie β€” brought to you by perl v5.42.2, dated 2026-07-29, and it’s the ExtUtils::CppGuess(3) manual page. bye! πŸ’–

πŸ“¦ where this page comes from