Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Configure a Make-based project.
Usage
vcpkg_make_configure(
SOURCE_PATH <source-path>
[AUTORECONF]
[COPY_SOURCE]
[DISABLE_MSVC_WRAPPERS]
[DISABLE_CPPFLAGS]
[DISABLE_DEFAULT_OPTIONS]
[DISABLE_MSVC_TRANSFORMATIONS]
[OPTIONS <configure-setting>...]
[OPTIONS_RELEASE <configure-setting>...]
[OPTIONS_DEBUG <configure-setting>...]
[PRE_CONFIGURE_CMAKE_COMMANDS <cmake-command>...]
[LANGUAGES <language>...]
)
To use this function, you must depend on the helper port vcpkg-make
:
"dependencies": [
{
"name": "vcpkg-make",
"host": true
}
]
Parameters
SOURCE_PATH
The directory containing the project's source files.
This value is usually obtained as a result of calling a source acquisition command like vcpkg_from_github()
.
AUTORECONF
Runs autoreconf
when set.
COPY_SOURCE
If specified, the source directory is copied to the build directory before the configuration process begins. Useful for projects that modify the source tree during configuration or build.
DISABLE_MSVC_WRAPPERS
By default, vcpkg_make_configure
supplies wrappers that translate and reorder 'Unix / GCC-style' flags into 'MSVC-style' flags. This accommodates build systems that assume Unix or GCC conventions.
Setting DISABLE_MSVC_WRAPPERS
disables translation of flags, allowing tools like cl
and windres
to receive command-line flags without modifications.
DISABLE_MSVC_TRANSFORMATIONS
By default, when using MSVC
, libraries and flags are transformed to fit Unix-style conventions. This is necessary for compatibility with Unix-based build tools, such as libtool
, and because MSVC
is invoked via wrappers in cross-platform environments. These wrappers (like the ar-lib
and compile
scripts) ensure that MSVC
behaves more like a Unix compiler, simplifying the build process and making it compatible with Unix-centric tools.
Library Transformation:
- Libraries like
libexample.lib
are transformed into linker-friendly flags by adding a-l
prefix and stripping the extension (e.g.,libexample.lib
becomes-llibexample
).
Flag Handling:
- Escape characters (such as
-Xcompiler
and-Xlinker
) are added before compiler and linker flags (e.g.,-O2
becomes-Xcompiler -O2
). These escape characters ensure proper handling by tools likelibtool
, which may otherwise misinterpret flags that include special characters or spaces.
When DISABLE_MSVC_TRANSFORMATIONS
is set, the default transformations are disabled, and libraries and flags are passed in their original form to MSVC.
Example (Default Behavior):
libexample.lib → -llibexample
-O2 → -Xcompiler -O2
Example (DISABLE_MSVC_TRANSFORMATIONS
):
libexample.lib → libexample.lib
-O2 → -O2
Note
If you disable the MSVC wrappers using DISABLE_MSVC_WRAPPERS
, this option (DISABLE_MSVC_TRANSFORMATIONS
) has no effect.
DISABLE_CPPFLAGS
Disables the extraction of C preprocessor flags (-D
and -isystem
) from CFLAGS
and CXXFLAGS
into CPPFLAGS
.
By default, vcpkg_make_configure
extracts preprocessor relevant flags from the CFLAGS
and CXXFLAGS
environment variables into CPPFLAGS
, because preprocessor flags in vcpkg are normally supplied through compiler settings variables like VCPKG_C_FLAGS
or VCPKG_CXX_FLAGS
.
Setting DISABLE_CPPFLAGS
disables that behavior, leaving preprocessor relevant flags in CFLAGS
and CXXFLAGS
.
This can be useful for projects that do not use standard environment variables or have specific preprocessor requirements.
DISABLE_DEFAULT_OPTIONS
Setting this flag disables the following default configure options provided by vcpkg_make_configure
. Use this flag only if you need complete control over the configure command line and want to specify all options manually.
General Defaults:
- --disable-silent-rules - Makes the build process output more verbose.
- --verbose - Enables verbose output from the configure script.
Library Linkage:
- For dynamic library builds: --enable-shared and --disable-static
- For static library builds: --disable-shared and --enable-static
Installation Directories:
Adjusts standard directories (bin, lib, share, etc.) to conform with vcpkg's layout.
Always Set:
--prefix
: The base installation directory, adjusted per build type (release or debug).--bindir
: Subdirectory under the prefix for executable programs--sbindir
: Subdirectory under the prefix for system administration programs--libdir
: Subdirectory under the prefix for libraries (shared or static)--mandir
: Subdirectory under the prefix for manual pages (man files)--docdir
: Subdirectory under the prefix for documentation--datarootdir
: Subdirectory under the prefix for architecture-independent data
Debug builds only:
--includedir
: Subdirectory under the prefix for header files
Example Paths:
Release Configuration:
--prefix=${current_installed_dir}
--bindir=${prefix}/tools/${PORT}/bin
--sbindir=${prefix}/tools/${PORT}/sbin
--libdir=${prefix}/lib
--mandir=${prefix}/share/${PORT}
--docdir=${prefix}/share/${PORT}
--datarootdir=${prefix}/share/${PORT}
Debug Configuration:
--prefix=${current_installed_dir}${path_suffix_DEBUG}
--bindir=${prefix}/../tools/${PORT}${path_suffix_DEBUG}/bin
--sbindir=${prefix}/../tools/${PORT}${path_suffix_DEBUG}/sbin
--libdir=${prefix}/lib
--includedir=${prefix}/../include
--mandir=${prefix}/share/${PORT}
--docdir=${prefix}/share/${PORT}
--datarootdir=${prefix}/share/${PORT}
Platform-Specific Tweaks:
On Windows
- Sets
gl_cv_double_slash_root=yes
to signal to the configure script that it is running on Windows, where paths can begin with double slashes (//). - Sets
ac_cv_func_memmove=yes
andac_cv_func_memset=yes
to indicate that thememmove
andmemset
functions are available. - sets
gl_cv_host_cpu_c_abi=no
on ARM64 builds to indicate that the compiler does not use the standard C ABI for floating-point numbers.
- Sets
On Unix-like systems:
- Adjusts paths to match the typical Unix filesystem hierarchy (e.g., using /usr/local).
Note
These default options streamline the configuration process for most projects. If you need a highly customized build, you can set DISABLE_DEFAULT_OPTIONS
and manually provide all the necessary configuration options.
OPTIONS
Additional options to pass to the configure script regardless of the configuration type (debug or release). Use these to specify any custom flags or settings required by the project.
OPTIONS_RELEASE
Additional options to pass to the configure script only during a release build. Use these to specify any custom flags or settings required by the project.
These are in addition to OPTIONS
.
OPTIONS_DEBUG
Additional options to pass to the configure script only during a debug build. Use these to specify any custom flags or settings required by the project.
These are in addition to OPTIONS
.
PRE_CONFIGURE_CMAKE_COMMANDS
Specifies a list of CMake commands to execute before the configure process for each build type. That is, if VCPKG_BUILD_TYPE
is empty (the default), these commands are run once for debug and once for release. If VCPKG_BUILD_TYPE
is release
, these commands are only run once for release. This can be used to set up the environment or prepare the build in a way that the configure script requires.
Note
When the COPY_SOURCE
option is not set, the CMake commands in PRE_CONFIGURE_CMAKE_COMMANDS
operate directly on the files in the original source directory.
Example
function(my_preconfigure_command SRC BUILD_TYPE)
# Each source directory gets different version.txt files
if(BUILD_TYPE STREQUAL "release")
file(WRITE "${SRC}/version.txt" "This is a release version!")
else()
file(WRITE "${SRC}/version.txt" "This is a debug version!")
endif()
# The environment variable has different values for each configuration
set(ENV{SPECIAL} "${BUILD_TYPE} is magic")
endfunction()
vcpkg_make_configure(
# ...
PRE_CONFIGURE_CMAKE_COMMANDS my_preconfigure_command
)
In this example, my_preconfigure_command
are executed twice (for "Debug" and "Release" if VCPKG_BUILD_TYPE
is not set):
Debug build: Creates version.txt
with the content "This is a debug version!" and sets the environment variable SPECIAL
to "Debug is magic."
Release build: Creates version.txt
with the content "This is a release version!" and sets the environment variable SPECIAL
to "Release is magic."
LANGUAGES
The LANGUAGES
argument specifies the programming languages to be considered during the configuration and build process.
Valid values are C
, CXX
, ASM
, CUDA
, Fortran
, HIP
, ISPC
, Swift
, OBJC
, OBJCXX
.
Appends the specified languages to VCPKG_CMAKE_CONFIGURE_OPTIONS
as -DVCPKG_LANGUAGES=<languages>
. vcpkg_cmake_get_vars
uses the options stored in VCPKG_CMAKE_CONFIGURE_OPTIONS
, including the LANGUAGES
argument, to configure a dummy CMake project and extract the necessary CMake variables. The LANGUAGES
argument affects the configuration of the dummy CMake project used in vcpkg_cmake_get_vars
.
The configuration extracts relevant CMake variables for the specified languages and re-exports them as VCPKG_DETECTED_CMAKE_*
.
See,
vcpkg_make_configure(
SOURCE_PATH "/path/to/source"
LANGUAGES "C" "CXX" "Fortran"
)
Examples
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO example/examplelib
REF v1.2.3
SHA512 123456...
)
vcpkg_make_configure(
SOURCE_PATH ${SOURCE_PATH}
OPTIONS
--disable-silent-rules
--enable-foo
OPTIONS_DEBUG
--enable-debug-logs
)
vcpkg_make_install()
Remarks
This command replaces vcpkg_configure_make()
.