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.