1

我没有找到任何关于安装这个库的合适教程。我得到的最接近的是:

  • gumbo-parser使用自述文件中的说明构建(Linux)
  • gumbo-query使用自述文件中的说明构建(Linux)
  • 将lib文件夹复制到我的Windows机器
  • 将这些行添加到我的 CMake 文件中:
set(CMAKE_PREFIX_PATH "E:/Programs/gumbo-query")
include_directories("E:/Programs/gumbo-query/src")
set(LIBS ${LIBS} "E:/Programs/gumbo-query/src/lib")

但问题是,当我尝试包含 Document.h 时,它会显示gumbo.h: no such file or directory.

我将如何解决这个问题?我是否以完全错误的方式接近这个?

4

1 回答 1

2

因此,我在 Discord 服务器中的另一位同事的帮助下设法解决了我的问题,我将在此处发布解决方案,以使人们未来的生活更轻松。

本指南适用于 Windows,主要是因为没有任何关于如何在 Windows 上构建这些东西的资源。

步骤1:

将两个存储库克隆到其默认状态。( C 的gumbo-parser, C++的 gumbo-query

重要的!


确保两个存储库位于同一目录中,因为本教程假定存储库的名称未更改并且它们一起位于同一目录中。

例如,以下目录是每个存储库驻留的合理位置。

C:\C++\gumbo_parser

C:\C++\gumbo_query


第2步:

将此构建脚本复制到gumbo-parser\src目录中:

@echo off
cls

REM     Build Script

REM Set Compiler Settings Here


set GCC=gcc
set AR=ar
set OUTPUT=libgumbo_parser.a
set DEBUGMODE=0

set REBUILD_LIBRARIES=0

set LINK_ONLY=0
set VERBOSE=0

set ASYNC_BUILD=1

set C_COMPILER_FLAGS=-std=c99 -Wall
set ADDITIONAL_LIBRARIES=
set ADDITIONAL_LIBDIRS=
set ADDITIONAL_INCLUDEDIRS=-I.


del %OUTPUT% 2>nul

setlocal enabledelayedexpansion


if %LINK_ONLY% GTR 0 (
    goto linker
)

if %DEBUGMODE% GTR 0 (
    set DEBUG_INFO=-g
) else (
    set DEBUG_INFO=
)

if %ASYNC_BUILD% GTR 0 (
    set WAIT=
) else (
    set WAIT=/WAIT
)

if %REBUILD_LIBRARIES% GTR 0 (
    del /S /Q "*.o" 2>nul
)

echo Building C Libraries...
for %%F in (*.c) do (
    if not exist %%~nF.o (
        echo Building %%~nF.o
        start /B %WAIT% "%%~nF.o" %GCC% %ADDITIONAL_INCLUDEDIRS% %C_COMPILER_FLAGS% %DEBUG_INFO% -c %%F -o %%~nF.o

        if %VERBOSE% GTR 0 (
            echo %GCC% %ADDITIONAL_INCLUDEDIRS% %C_COMPILER_FLAGS% %DEBUG_INFO% -c %%F -o %%~nF.o
        )
    )
)

REM Wait for building process to finish
:loop
set /a count=0
for /f %%G in ('tasklist ^| find /c "%GCC%"') do ( set /A count=%count%+%%G )
if %count%==0 (
    goto linker
) else (
    timeout /t 2 /nobreak>nul
    goto loop
)

:linker

set "files="
for /f "delims=" %%A in ('dir /b /a-d "*.o" ') do set "files=!files! %%A"

:link
echo Linking Executable...

if %VERBOSE% GTR 0 (
    echo %AR% ru %OUTPUT% %files%
)

%AR% ru %OUTPUT% %files%

:finish
if exist .\%OUTPUT% (
    echo Build Success!
) else (
    echo Build Failed!
)

您需要确保bin在 PATH 环境中配置了 C 编译器 (MinGW) 目录;否则,配置构建脚本并将 AR 和 GCC 设置为 gcc 所在的确切路径。

例如

set GCC=E:\Programs\Qt\Tools\mingw810_64\bin\gcc
set AR=E:\Programs\Qt\Tools\mingw810_64\bin\ar

您还需要在 Windows CMD 窗口中以提升的权限运行此脚本。否则它对我不起作用。

这将创建一个秋葵解析器的静态库。

第 3 步:

为 gumbo 查询配置 CMake。

首先,确保在配置 gumbo_query 时设置了以下变量:

Gumbo_INCLUDE_DIR <path-to-gumbo-parser>/src

Gumbo_LIBRARY <path-to-gumbo-parser>/src/libgumbo_parser.a

Gumbo_static_LIBRARY

这应该已经设置好了,但以防万一确保您的 C 和 C++ 编译器设置正确:

CMAKE_C_COMPILER <path-to-mingw>\bin\gcc.exe

CMAKE_CXX_COMPILER <path-to-mingw>\bin\g++.exe

CMAKE_CXX_COMPILER_AR <path-to-mingw>\bin\gcc-ar.exe

以及 CMake 程序(您必须为此勾选高级): CMAKE_MAKE_RPOGRAM <path-to-mingw>\bin\mingw32-make.exe

确保您正在配置正确的目录。将构建位置设置为位于gumbo-query中的构建文件夹。

CMake Gui 设置 1

CMake Gui 设置 2

第 4 步:生成并运行 CMake。

CMake 应该位于您的 MinGW bin 文件夹 cd中到您的gumbo-query/build目录。然后,运行mingw32-make以构建目标库。完成后,您将拥有一个动态和静态的秋葵查询库。

在哪里可以找到您的构建文件和有用的目录:

Gumbo 查询 DLL gumbo-query\build\src\libgq.dll Gumbo 查询静态库 gumbo-query\lib\libgq.a Gumbo 查询 DLL 导入库 gumbo-query\lib\libgq.dll.a Gumbo 解析器静态库 gumbo-parser\src\libgumbo_parser.a Gumbo 解析器头文件 gumbo-parser\src

第 5 步(可选):运行示例

要编译在 gumbo-query 中找到的示例应用程序,请 cd 进入示例目录并运行以下命令:

g++ -c main.cpp -I..\src -I..\..\gumbo-parser\src g++ -o test.exe main.o -L..\lib -L..\..\gumbo-parser\src -static -lgq -lgumbo_parser

运行:./test测试最终应用程序。

于 2021-09-08T19:24:33.013 回答