端口覆盖中设置变量在vcpkg中不生效

问题描述 投票:0回答:1

我一直在尝试使用 vcpkg 构建 gflags。我知道你可以使用

vcpkg install gflags

问题是显然我需要使用共享组件来构建它。这是我使用

-DCMAKE_TOOLCHAIN_FILE=D:\MTC_source_code\vcpkg\scripts\buildsystems\vcpkg.cmake

运行 cmake 时遇到的错误
CMake Error at D:/src/vcpkg/installed/x64-windows/share/gflags/gflags-config.cmake:40 (message):
  Package gflags was installed without required component shared!

我注意到,如果我从头开始构建 gflags 然后安装它,我会得到正确的行为。我按照以下方式从源安装了它。

git clone https://github.com/gflags/gflags.git
cd gflags
mkdir _build
cd _build 
cmake .. -G "NMake Makefiles" -DGFLAGS_BUILD_SHARED_LIBS="ON" -DBUILD_SHARED_LIBS="ON"
nmake
nmake install/local

这消除了组件共享问题。

我尝试通过为 gflags 创建端口覆盖来在 vcpkg 中复制此内容,我尝试了两件事:

  1. 修改 portfile.cmake 以反映所需的标志:
vcpkg_cmake_configure(
    SOURCE_PATH "${SOURCE_PATH}"
    OPTIONS
        -DGFLAGS_REGISTER_BUILD_DIR:BOOL=OFF
        -DGFLAGS_REGISTER_INSTALL_PREFIX:BOOL=OFF
        -DBUILD_gflags_nothreads_LIB:BOOL=ON
        -DGFLAGS_USE_TARGET_NAMESPACE:BOOL=ON
        -DCMAKE_DEBUG_POSTFIX=d
        -DGFLAGS_BUILD_SHARED_LIBS="ON" 
        -DBUILD_SHARED_LIBS="ON"
)

但这并没有解决问题。

  1. 然后我尝试创建一个补丁,并将其应用到 portfile.cmake,但它也不起作用。

补丁内容:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 53e77cb..17faeb4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -93,7 +93,8 @@ set (PACKAGE_TARNAME     "${PACKAGE_NAME}-${PACKAGE_VERSION}")
 set (PACKAGE_BUGREPORT   "https://github.com/gflags/gflags/issues")
 set (PACKAGE_DESCRIPTION "A commandline flags library that allows for distributed flags.")
 set (PACKAGE_URL         "http://gflags.github.io/gflags")
-
+set (GFLAGS_BUILD_SHARED_LIBS "ON")
+set (BUILD_SHARED_LIBS "ON")
 project (${PACKAGE_NAME} VERSION ${PACKAGE_VERSION} LANGUAGES CXX)
 if (CMAKE_VERSION VERSION_LESS 3.4)
   # C language still needed because the following required CMake modules

它仍然失败:

CMake Error at D:/src/vcpkg/installed/x64-windows/share/gflags/gflags-config.cmake:40 (message):
  Package gflags was installed without required component shared!

有趣的是,如果我在 vcpkg 档案中找到 gflags 文件夹(vcpkg uildtrees\gflags\src 2.2.2-d9283b9285),请不要修改任何内容,然后使用以下命令进行构建:

mkdir _build
cd _build 
cmake .. -G "NMake Makefiles"
nmake
nmake install/local

它可以工作,似乎只有在从 vcpkg 构建和安装时才会失败。

为了获得我所需要的东西,我还缺少什么?

c++ cmake vcpkg nmake gflags
1个回答
0
投票

vcpkg 根据

-DBUILD_SHARED_LIBS="ON"
内的
VCPKG_LIBRARY_LINKAGE
自行设置
vcpkg_cmake_configure
。由于它是在端口文件中的
OPTIONS
之后添加的,因此它只会推翻该设置。您可以在端口文件/三元组中将
VCPKG_LIBRARY_LINKAGE
更改为静态,或使用
VCPKG_CMAKE_CONFIGURE_OPTIONS
强制设置。

© www.soinside.com 2019 - 2024. All rights reserved.