使用CMake和MinGW构建PoDoFo库

3
我正在尝试在Windows平台上构建PoDoFo Library(用作API)。这是使用CMake完成的。 ReadMe文件如下所述。不幸的是,我对CMake还很陌生,无法从中获得太多信息。

在Windows上构建PoDoFo

需要CMake 2.6.x。您可以从cmake.org下载。

在Windows上,PoDoFo可以作为共享或静态库构建。 不支持同时构建两者。默认情况下,只会构建共享库。 如果您想要静态库,请禁用生成共享库的选项:

    -DPODOFO_BUILD_SHARED=FALSE

处理win32平台的库命名

特别是在Windows上,自定义构建的库通常与您下载的预构建副本名称不同。如果它们被称为其他名称,则CMake无法找到它们,除非您告诉它。使用这些变量告诉CMake在哪些名称下查找库:

•FREETYPE_LIBRARY_NAMES_DEBUG, FREETYPE_LIBRARY_NAMES_RELEASE and FREETYPE_LIBRARY_NAMES
•TIFF_LIBRARY_NAMES_DEBUG, TIFF_LIBRARY_NAMES_RELEASE and TIFF_LIBRARY_NAMES 
•LIBJPEG_LIBRARY_NAMES_DEBUG, LIBJPEG_LIBRARY_NAMES_RELEASE and LIBJPEG_LIBRARY_NAMES
•ZLIB_LIBRARY_NAMES_DEBUG, ZLIB_LIBRARY_NAMES_RELEASE,ZLIB_LIBRARY_NAMES

CMake在Windows上使用MinGW进行构建

一旦设置好MinGW,确保MinGW的“bin”目录在您的PATH中,并确保设置CMAKE_INCLUDE_PATH和CMAKE_LIBRARY_PATH,以便CMake可以找到PoDoFo所需的头文件和.lib文件的库。已知从http://gnuwin32.sf.net/下载的GnuWin32库包可与PoDoFo配合使用,因此从该网站安装zlib、freetype和libjpeg应该就可以了。

要使用默认的GnuWin32安装程序和已经在您的PATH中的MinGW配置和构建PoDoFo:

md ..\podofo-debug 
cd ..\podofo-debug
cmake -G "MinGW Makefiles" ..\podofo-src -DCMAKE_INCLUDE_PATH=c:\progra~1\gnuwin32\include -DCMAKE_LIBRARY_PATH=c:\progra~1\gnuwin32\lib -DPODOFO_BUILD_SHARED:BOOL=FALSE mingw32-make

我已经安装了CMake并下载了其他库,如freetype、zlib、libjpeg。它们的头文件和二进制文件都在它们各自的文件夹中。
现在DCMAKE_INCLUDE_PATHDCMAKE_LIBRARY_PATH应该设置为什么?"MinGW Makefiles"是什么?我需要提供任何额外的参数吗?
如果有人能简单地解释一下我该怎么做,我将不胜感激。
编辑:CMAKE执行时出错:
-- Ensure you cppunit installed version is at least 1.12.0
Cppunit not found. No unit tests will be built.
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindPack
ageHandleStandardArgs.cmake:97 (message):
  Could NOT find FREETYPE (missing: FREETYPE_LIBRARY FREETYPE_INCLUDE_DIR)
Call Stack (most recent call first):
  C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindPackageHandleStan
dardArgs.cmake:291 (_FPHSA_FAILURE_MESSAGE)
  cmake/modules/FindFREETYPE.cmake:75 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:372 (FIND_PACKAGE)
2个回答

7

要构建PoDoFo,您需要安装GnuWin32、CMake、MinGW32和PoDoFo源代码。

  1. 下载GetGnuWin32
  2. 安装到c:\getgnuwin32
  3. 打开cmd.exe
  4. cd c:\getgnuwin32
  5. download.bat
  6. install.bat

然后按照@ibizaman的建议进行操作。

cmake -G "MinGW Makefiles"  -DCMAKE_INCLUDE_PATH="C:\gnuwin32\include" -DCMAKE_LIBRARY_PATH="C:\gnuwin32\lib" -DPODOFO_BUILD_STATIC=TRUE ..

FreeType 应该与 GnuWin32 包一起安装。


谢谢你们两个!安装了这些库之后,它终于可以工作了。 - Abhishek Bansal
实际上,这会为podofo生成共享构建Makefiles。尽管声明了shared=false标志。我该如何生成静态版本? - Abhishek Bansal
使用-DPODOFO_BUILD_STATIC=TRUE获取静态库。答案也已更新。 - Sergei Nikulov
是的,谢谢!这将生成静态构建的makefile。然而,当我输入mingw32-make时,podofo被构建了,但我找不到任何lib文件。只有libpodofo.a被生成。 - Abhishek Bansal
这是mingw-gcc归档(静态库)格式。这是正常的。 - Sergei Nikulov

5
如果您按照所有的指示操作,编译通常只需要执行以下操作:
cd <podofo root directory (where CMakeLists.txt is)>
mkdir build 
cd build
cmake -G "MinGW Makefiles" -DCMAKE_INCLUDE_PATH=<path to headers> -DCMAKE_LIBRARY_PATH=<path to libraries> -DPODOFO_BUILD_SHARED:BOOL=FALSE ..
mingw32-make

步骤如下: 首先,进入你的podofo源代码所在的目录。你应该看到一个名为CMakeLists.txt的文件。

其次(和第三步),创建(并进入)一个目录,用于进行编译。我将其命名为build,但它也可以是任何名称。这是最佳实践,因为你可以简单地删除build目录并回到一个干净的状态。

第四步,要求cmake为mingw创建makefile:

  • Specify the PODOFO_BUILD_SHARED like advertised in the manual: build shared or static version.
  • CMAKE_INCLUDE_PATH and CMAKE_LIBRAY_PATH are used to reference to the packages needed to build podofo. If you downloaded the precompiled packages like you did since you have de headers and the binaries, then you need to give to cmake the path to those headers and binaries. You can specify the variables multiple times if needed, e.g.:

    cmake -G "MinGW Makefiles" -DCMAKE_INCLUDE_PATH=/path/to/freetype/include -DCMAKE_LIBRARY_PATH=/path/to/freetype/lib  -DCMAKE_INCLUDE_PATH=/path/to/zlib/include -DCMAKE_LIBRARY_PATH=/path/to/zlib/lib -DPODOFO_BUILD_SHARED:BOOL=FALSE ..
    
  • The "MinGW Makefiles" tells cmake to create makefiles specific to mingw. Else, by default on windows, it creates makefiles specific to Microsoft Visual Studio.

  • Finaly reference the CMakeLists.txt in the parent directory with .. at the end.
最后,但同样重要的是,使用mingw版本的make进行编译。

谢谢,我会尝试一下。 - Abhishek Bansal
现在没有类似 c:\progra1\gnuwin32\include 或 lib 的目录。我需要安装类似 freetype 这样的依赖库,还是需要将它们的源文件放置在相同的目录 c:\progra1\gnuwin32\include 和 lib 中? - Abhishek Bansal
你需要指定podofo所需的所有依赖项的位置。你说你有freetype、zlib和libjpeg的头文件和二进制文件。你只需要告诉cmake它们的位置即可。CMAKE_INCLUDE_PATH用于头文件,CMAKE_LIBRARY_PATH用于二进制文件(库)。如果需要,可以在我的示例中第4个命令行上多次指定这些变量。 - ibizaman
非常感谢您迄今为止的帮助!我实际上已经取得了一些成功。然而,我在使用freetype库时遇到了问题。不知何故,cmake无法找到包含文件。它说在FindPackageHandleStandardArgs.cmake中存在一些失败报告。您有什么想法是什么原因?我编辑了我的问题以包括确切的错误消息。 - Abhishek Bansal
你是否添加了正确的freetype路径?你是否像@Sergey建议的那样安装了依赖项?如果没有,你应该尝试一下。 - ibizaman
谢谢你们两个!在Sergey建议安装库之后,它终于起作用了。 - Abhishek Bansal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接