编译依赖项下载:
cmake下载:cmake.org
libpng下载:http://www.libpng.org

zlib下载:http://www.zlib.net/

我下载了zlib127-dll.zip、lpng1256.zip、CMake3.8.0,注意你下载的应该是zlib已经编译好的windows版本而不是源代码,如果你下载的是源代码版本。需要另行编译zlib库。这不是多此一举?
解压下载的东西
打开cmake-gui,在源代码目录填写解压的libpng目录,在build目录随便填写一个目录存放生成的VS2013项目文件

因为需要依赖zlib,所以要设置zlib的包含目录,点击Add Entry按钮,把解压的zlib的头文件目录和库文件依次加入变量ZLIB_INCLUDE_DIR、ZLIB_LIBRARY

最后是这样

之后点击Configure,编译工具选择VS2013

出现配置的参数,根据自己的需要配置。其中CMAKE_INSTALL_PREFIX就是之后安装库的目录,可以自己设置。PNG_SHARED是生成动态库,PNG_STATIC是生成静态库。两个选项都选就都生成。

再点一次Configure全部参数就配置完成了

点击Generate生成项目,再点击Open Project打开项目,就会启动VS2013
点击生成,批生成,勾选ALL_BUILD的Debug和Release,点击生成就会生成libpng库了

之后批生成勾选INSTALL,点击生成就会安装到之前设定的库安装目录
这是安装后的libpng库目录结构
├─bin
│ libpng-config
│ libpng12-config
│ libpng12.dll
│ libpng12d.dll
│
├─include
│ │ png.h
│ │ pngconf.h
│ │
│ └─libpng12
│ png.h
│ pngconf.h
│
├─lib
│ │ libpng12_static.lib
│ │ libpng12_staticd.lib
│ │ png12.lib
│ │ png12d.lib
│ │
│ └─pkgconfig
│ libpng.pc
│ libpng12.pc
│
└─man
├─man3
│ libpng.3
│ libpngpf.3
│
└─man5
png.5
由于使用动态库版本的zlib,使用libpng编译的程序运行依赖zlib1.dll文件,并且在编译时需要zlib的头文件和库文件的参与
后记:
在CMake配置参数时要将PNG_NO_CONSOLE_IO参数和PNG_NO_STDIO参数取消,这样才能导出_png_init_io等符号。否则之后如果要使用png_init_io函数时,在链接阶段会找不到符号报错

取消勾选参数后导出的符号包含了_png_init_io
F _png_info_destroy
F _png_info_init_3
F _png_init_io
8 _png_init_read_transformations
而之前只有下面几个,因此链接报错
F _png_info_destroy
F _png_info_init_3
8 _png_init_read_transformations