配置基于生成的项目。
用法
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>...]
)
若要使用此函数,必须依赖于帮助程序端口 vcpkg-make
:
"dependencies": [
{
"name": "vcpkg-make",
"host": true
}
]
参数
SOURCE_PATH
包含项目的源文件的目录。
此值通常是由于调用源获取命令(如 vcpkg_from_github()
)而获取的。
AUTORECONF
设置时运行 autoreconf
。
COPY_SOURCE
如果指定,则源目录将在配置过程开始之前复制到生成目录。 适用于在配置或生成期间修改源树的项目。
DISABLE_MSVC_WRAPPERS
默认情况下,vcpkg_make_configure
提供包装器,这些包装器将“Unix/GCC-style”标志重新排序为“MSVC 样式”标志。 这适用于假定 Unix 或 GCC 约定的生成系统。
设置 DISABLE_MSVC_WRAPPERS
会禁用标志转换,从而允许 cl
和 windres
等工具在不修改的情况下接收命令行标志。
DISABLE_MSVC_TRANSFORMATIONS
默认情况下,使用 MSVC
时,库和标志将转换为适合 Unix 样式约定。 这是与基于 Unix 的生成工具(如 libtool
)兼容所必需的,因为 MSVC
是通过跨平台环境中的包装器调用的。 这些包装器(如 ar-lib
和 compile
脚本)可确保 MSVC
的行为更像 Unix 编译器,简化生成过程,使其与以 Unix 为中心的工具兼容。
库转换:
-
libexample.lib
等库通过添加-l
前缀和剥离扩展(例如,libexample.lib
变为-llibexample
)来转换为链接器友好的标志。
标志处理:
- 转义字符(如
-Xcompiler
和-Xlinker
)在编译器和链接器标志(例如,-O2
变为-Xcompiler -O2
)之前添加。 这些转义字符可确保使用libtool
等工具正确处理,否则这些工具可能会错误解释包含特殊字符或空格的标志。
设置 DISABLE_MSVC_TRANSFORMATIONS
时,将禁用默认转换,库和标志以原始形式传递到 MSVC。
示例(默认行为):
libexample.lib → -llibexample
-O2 → -Xcompiler -O2
示例(DISABLE_MSVC_TRANSFORMATIONS
):
libexample.lib → libexample.lib
-O2 → -O2
注意
如果使用 DISABLE_MSVC_WRAPPERS
禁用 MSVC 包装器,则此选项(DISABLE_MSVC_TRANSFORMATIONS
)不起作用。
DISABLE_CPPFLAGS
禁用从 CFLAGS
和 CXXFLAGS
提取 C 预处理器标志(-D
和 -isystem
)到 CPPFLAGS
。
默认情况下,vcpkg_make_configure
将预处理器相关标志从 CFLAGS
和 CXXFLAGS
环境变量提取到 CPPFLAGS
,因为 vcpkg 中的预处理器标志通常通过编译器设置变量(如 VCPKG_C_FLAGS
或 VCPKG_CXX_FLAGS
)提供。
设置 DISABLE_CPPFLAGS
将禁用该行为,在 CFLAGS
和 CXXFLAGS
中保留预处理器相关标志。
这对于不使用标准环境变量或具有特定预处理器要求的项目非常有用。
DISABLE_DEFAULT_OPTIONS
设置此标志将禁用 vcpkg_make_configure
提供的以下默认配置选项。 仅当需要完全控制配置命令行并且想要手动指定所有选项时,才使用此标志。
常规默认值:
- --disable-silent-rules - 使生成进程输出更加详细。
- --verbose - 启用配置脚本的详细输出。
库链接:
- 对于动态库生成:--enable-shared 和 --disable-static
- 对于静态库内部版本:--disable-shared 和 --enable-static
安装目录:
调整标准目录(bin、lib、share 等),使其符合 vcpkg 的布局。
始终设置:
-
--prefix
:每个生成类型(发布或调试)调整的基本安装目录。 -
--bindir
:可执行文件的前缀下的子目录 -
--sbindir
:系统管理程序的前缀下的子目录 -
--libdir
:库前缀下的子目录(共享或静态) -
--mandir
:手动页面前缀下的子目录(man 文件) -
--docdir
:文档前缀下的子目录 -
--datarootdir
:独立于体系结构的数据前缀下的子目录
-
仅调试生成:
-
--includedir
:标头文件的前缀下的子目录
-
示例路径:
发布配置:
--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}
调试配置:
--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 调整:
在 Windows 上
- 将
gl_cv_double_slash_root=yes
设置为向配置脚本发出信号,该脚本在 Windows 上运行,路径可以从双斜杠(//)开始。 - 设置
ac_cv_func_memmove=yes
和ac_cv_func_memset=yes
,以指示memmove
和memset
函数可用。 - 在 ARM64 内部版本中设置
gl_cv_host_cpu_c_abi=no
,以指示编译器不使用标准 C ABI 进行浮点数。
- 将
在类似 Unix 的系统上:
- 调整路径以匹配典型的 Unix 文件系统层次结构(例如,使用 /usr/local)。
注意
这些默认选项简化了大多数项目的配置过程。 如果需要高度自定义的生成,可以设置 DISABLE_DEFAULT_OPTIONS
并手动提供所有必要的配置选项。
选项
无论配置类型(调试或发布)如何传递给配置脚本的其他选项。 使用这些标记可以指定项目所需的任何自定义标志或设置。
OPTIONS_RELEASE
仅在发布生成期间传递给配置脚本的其他选项。 使用这些标记可以指定项目所需的任何自定义标志或设置。
这些是除了 OPTIONS
。
OPTIONS_DEBUG
仅在调试生成期间传递给配置脚本的其他选项。 使用这些标记可以指定项目所需的任何自定义标志或设置。
这些是除了 OPTIONS
。
PRE_CONFIGURE_CMAKE_COMMANDS
指定要在每个生成类型配置过程之前执行的 CMake 命令的列表。 也就是说,如果 VCPKG_BUILD_TYPE
为空(默认值),这些命令将运行一次进行调试,一次用于发布。 如果 VCPKG_BUILD_TYPE
release
,则这些命令仅在发布时运行一次。 这可用于设置环境,或以配置脚本所需的方式准备生成。
注意
如果未设置 COPY_SOURCE
选项,PRE_CONFIGURE_CMAKE_COMMANDS
中的 CMake 命令直接对原始源目录中的文件进行操作。
例
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
)
在此示例中,my_preconfigure_command
执行两次(如果未设置 VCPKG_BUILD_TYPE
,则为“调试”和“发布”):
调试生成:使用内容“这是调试版本!”创建 version.txt
,并将环境变量 SPECIAL
设置为“调试是神奇的”。
发布版本:使用内容“这是发布版本!”创建 version.txt
,并将环境变量 SPECIAL
设置为“Release is magic”。
语言
LANGUAGES
参数指定要在配置和生成过程中考虑的编程语言。
有效值为 C
、CXX
、ASM
、CUDA
、Fortran
、HIP
、ISPC
、Swift
、OBJC
、OBJCXX
。
将指定语言追加到 VCPKG_CMAKE_CONFIGURE_OPTIONS
为 -DVCPKG_LANGUAGES=<languages>
。
vcpkg_cmake_get_vars
使用存储在 VCPKG_CMAKE_CONFIGURE_OPTIONS
中的选项(包括 LANGUAGES
参数)来配置虚拟 CMake 项目并提取必要的 CMake 变量。
LANGUAGES
参数会影响 vcpkg_cmake_get_vars
中使用的虚拟 CMake 项目的配置。
该配置提取指定语言的相关 CMake 变量,并将其重新导出为 VCPKG_DETECTED_CMAKE_*
。
看
vcpkg_make_configure(
SOURCE_PATH "/path/to/source"
LANGUAGES "C" "CXX" "Fortran"
)
例子
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()
言论
此命令替换 vcpkg_configure_make()
。