本项目已开源,地址:https://github.com/Car-eye-team/Car-eye-RTMP-server/tree/master/source/nginx_windows
继昨天利用VS的命令工具nmake工具将nginx编译通过后就心思如何利用VS项目对nginx进行管理编译,网上资料不多,自己摸索吧,没想到不是很难,记录一下。
使用VS2017创建一个空的Console项目,将里面代码清空,然后创建如下几个目录:
注意一点的是src目录下的mail,misc,stream目录下的代码就不要导入了,根据Makefile里面描述是用不到的;
然后根据这几个目录进行代码导入,generate目录对应的configure生成的build目录;
接下来进行项目配置,重点!~
无图无真相,多图:
常规里面字符集要设置为多字节字符集,不能用Unicode。
C/C++常规选项设置附加包含目录:
增加如下头文件目录:
$(SolutionDir)/generate
$(SolutionDir)/../zlib
$(SolutionDir)/include
$(SolutionDir)/../pcre
$(SolutionDir)/src/core
$(SolutionDir)/src/event
$(SolutionDir)/src/event/modules
$(SolutionDir)/src/http
$(SolutionDir)/src/http/modules
$(SolutionDir)/src/os/win32
$(SolutionDir)/build
$(SolutionDir)/../nginx-rtmp-module
就是项目管理中头文件的那几个目录,非nginx项目的库引用及附加模块路径要根据自己项目情况来定~!
代码生成项,运行库要选择/Mtd,Release模式可选择/MT模式;
语言->符合模式要选择“否”;
预编译头要选择不使用预编译头,因为不是VC++项目;
高级要编译为C代码(/TC);
链接器设置,常规附加库目录:
$(SolutionDir)/libs/openssl
$(SolutionDir)/../pcre
$(SolutionDir)/../zlib
根据自己的静态库存放目录来定义,openssl是已经编译好的,确保对应目录下都有对应的.lib库;
输入项需要添加支持库:
ws2_32.lib
legacy_stdio_definitions.lib
pcre.lib
libcrypto32MTd.lib
libssl32MTd.lib
crypt32.lib
zlib.lib
库的顺序最好不要打乱,libcrypto32MTd.lib libssl32MTd.lib是openssl的静态库,根据设置选择MTd.lib或者MT.lib;
pcre.lib跟zlib.lib是对应pcre zlib项目的库;
项目的设置到这里就完成了,先别忙着编译,上一篇提到的__iob_func这个函数又出来作怪了,如果不改的话会提示__iob_func重复定义了,将__iob_func这个函数的定义放到build目录的ngx_pch.c文件中,然后在ngx_auto_config.h文件中只做声明即可;
这时就可以编译了,但前面说了Makefile里面并不是将所有文件都进行编译的,所以你必然会导入多了,那么就有两个方法:
1、你写一个脚本文件,根据Makefile里面需要的文件导入到VS项目对应目录里;
2、你根据我创建的目录格式导入对应目录下的代码,然后编译,等报错的时候查看对应报错的文件是否包含在Makefile文件里,不在就移除到工程外;
不论何种方法,到最后基本就可以编译通过了,有些细节可能记不住了,有一点是这样编译出来的程序是没有图标的。。。