---
name: "ExtUtils::Builder::AutoDetect::C"
section: "3pm"
platform: "linux"
package: "libextutils-builder-compiler-perl"
version: "0.032-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/ExtUtils::Builder::AutoDetect::C"
---

# ExtUtils::Builder::AutoDetect::C(3pm)

compiler configuration, derived from perl's configuration

## NAME

ExtUtils::Builder::AutoDetect::C - compiler configuration, derived from perl's configuration

## VERSION

version 0.032

## SYNOPSIS

```
 my $planner = ExtUtils::Builder::Planner->new;
 $planner->load_extension('ExtUtils::Builder::AutoDetect::C', '0.001',
        profiles => ['@Perl'],
        type     => 'loadable-object',
 );
 $planner->compile('foo.c', 'foo.o', include_dirs => ['.']);
 $planner->link([ 'foo.o' ], 'foo.so', libraries => ['foo']);
 my $plan = $planner->materialize;
 $plan->run(['foo.so']);
```

## DESCRIPTION

This module is a ExtUtils::Builder::Planner::Extension that facilitates compiling object.

## METHODS

### add\_methods(%options)

This adds two delegate methods to the planner, `"compile"` and `"link"`. It takes named arguments that will be prefixed to the named arguments for all delegate calls. In practice, it's mainly useful with the `"config"`, `"profile"` and `"type"` arguments.

If your `$planner` has a `"config"` delegate, that will be used as default value for `"config"`.

This is usually not called directly, but through ExtUtils::Builder::Planner's `"load_extension"` method.

### link(\\@sources, $target, %options)

- type

  This works the same as with `"compile"`.

- config

  This works the same as with `"compile"`.

- profile

  This works the same as with `"compile"`.

- libraries

  A list of libraries to link to. E.g. `"['z']"`.

- library\_dirs

  A list of directories to find libraries in. E.g. `"['/opt/my-app/lib/']"`.

- extra\_args

  A list of additional arguments to the linker.

## DELEGATES

### compile($source, $target, %options)

This compiles `$source` to `$target`. It takes the following optional arguments:

- type

  The type of the final product. This must be one of:

  - •

    executable

    An executable to be run. This is the default.

  - •

    static-library

    A static library to link against.

  - •

    dynamic-library

    A dynamic library to link against.

  - •

    loadable-object

    A loadable extension. On most platforms this is the same as a dynamic library, but some (Mac) make a distinction between these two.

- config

  A Perl configuration to take hints from, must be an `"ExtUtils::Config"` compatible object.

- profiles

  A list of profile that can be used when compiling and linking. One profile comes with this distribution: `'@Perl'`, which sets up the appropriate things to compile/link with `"libperl"`.

- include\_dirs

  A list of directories to add to the include path, e.g. `"['include', '.']"`.

- define

  A hash of preprocessor defines, e.g. `"{DEBUG => 1, HAVE_FEATURE => 0 }"`

- extra\_args

  A list of additional arguments to the compiler.

## AUTHOR

Leon Timmermans \<fawaka@gmail.com\>

## COPYRIGHT AND LICENSE

This software is copyright (c) 2012 by Leon Timmermans.

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