我一直在尝试使用 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 中复制此内容,我尝试了两件事:
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"
)
但这并没有解决问题。
补丁内容:
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 构建和安装时才会失败。
为了获得我所需要的东西,我还缺少什么?
vcpkg 根据
-DBUILD_SHARED_LIBS="ON"
内的 VCPKG_LIBRARY_LINKAGE
自行设置 vcpkg_cmake_configure
。由于它是在端口文件中的 OPTIONS
之后添加的,因此它只会推翻该设置。您可以在端口文件/三元组中将 VCPKG_LIBRARY_LINKAGE
更改为静态,或使用 VCPKG_CMAKE_CONFIGURE_OPTIONS
强制设置。