为Linux构建没有PNG_READ_eXIf_SUPPORTED的libpng

时间:2019-06-04 13:35:59

标签: linux makefile cmake libpng

我需要构建libpng,但是在pnglibconf.h中没有#define PNG_READ_eXIf_SUPPORTED 我已经读过pnglibconf.dfa的评论,这里有一些禁用功能的方法,但是我没有设法使用它们来做我想做的事情。 问题在于,构建过程是在构建服务器上执行的,因此我无法更改libpng子模块内部的任何文件。服务器的工作方式如下:

  1. git下载克隆源
  2. 通过运行cmake ..
  3. 生成makefile
  4. 运行make命令。

因此,我有libnpg,但是包含了PNG_READ_eXIf_SUPPORTED选项。 Libpng是我项目的子模块,因此它会由构建服务器自动检出,因此我无法手动更改pnglibconf。 正如它在pnglibconf.dfa文件中所说的:

  

有三种禁用功能的方式,顺序不特定:

     

1)创建'pngusr.h',输入所需的私有构建信息    详细说明,并为每个选项#define PNG_NO_

     

清洁
   CPPFLAGS ='-DPNG_USER_CONFIG'./configure
   制作pnglibconf.h

     

pngusr.h仅在创建pnglibconf.h时使用,但是它    确保在整个过程中都指定-DPNG_USER_CONFIG更为安全    通过更改传递给初始./configure

的CPPFLAGS构建

我试图做这里写的事情。我运行cmake .. -DCMAKE_C_FLAGS="-DPNG_USER_CONFIG -I/home/me/dev/include",其中/home/me/dev/include-是pngusr.h文件的路径

然后我运行make命令。但是,生成的PNG_READ_eXIf_SUPPORTED仍然存在(通过make命令pnglibconf.h文件)。 所以我的主要问题是如何在没有PNG_READ_eXIf_SUPPORTED选项的情况下制作libpng?

1 个答案:

答案 0 :(得分:0)

我仍不清楚您要使用的特定自定义机制在您要使用的libpng版本中是否有效以及在何种程度上起作用。但是,似乎有一种更简单的方法。在同一文件中,您发布的摘录下面是第二个(三个)替代方案:

  

2)将要更改的设置的定义添加到CPPFLAGS;   例如:

-DPNG_DEFAULT_READ_MACROS=0

(格式简单)。我不太适合在基于CMake的构建系统上进行测试,但是在Autotools构建系统中,它看起来像一个魅力。通过检查和比较两者,我认为它也适用于CMake。特别是,您要运行

cmake .. -DCMAKE_CPP_FLAGS="-DPNG_NO_READ_eXIf"

针对您的特定情况。

请注意,顺便说一句,CPP(即预处理器)标志是您所指定的选项的正确位置(对于您最初尝试的-DPNG_USR_CONFIG也是如此)。但是实际上,它们可能仍可以在C编译器标志中工作。