因此,我在 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中的构建文件夹。


第 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
测试最终应用程序。