一 概述:
本文说述的是在苹果机器上搭建Apache模块开发环境的方法,选用的IDE是QT Creator。实质上,我最开初是选用CodeBlocks进行搭建,并且搭建成功了。但CodeBlocks当前的13.12版本在Mac的机器上很不稳定(其官网就特别地说明过不一点)。我使用时发现其启动较慢,运行过程中老是闪退等问题,于是才改用QT Creator。这里要声明的是,我在Windows及Linux上使用CodeBlocks,其表现很稳定,功能也是很强的,所以我才第一个选他。本文并不会涉及Apache的安装及其开发工具的安装。因为Mac系统本身已经自带了Apache及其开发工具。如果有朋友想CodeBlocks搭建Apache模块开发环境,可以在这里留个言。
二 需求描述
* (Mac)OS X Yosemite 版本 10.10.2
系统自带Apache版本: Server version: Apache/2.4.9 (Unix)
* Qt Creator 3.5.1 (opensource)
* Xcode Version 6.4 (6E35b)
这个是在“App Store”下载的。
核心需求就是,搭建一个Apache模块开发的IDE.
三 实现方法
3.1 apxs创建目标工程
apxs是Apache开发的重要工具,可用来自动生成基本的工程。因为系统已经自带了该工具,所以我们可以直接在终端调用如下命令:
apxs -n HelloApache -g
-n 用于指定工程名,“HelloApache”就是具体的工程名
-g 用来生成工程所需的最基本的文件。
命令执行完毕后,会在当前目录生成一个名为“HelloApache”的子目录。其内容是一个Apache版的HelloWorld工程。请cd进入HelloApache子目录,并执行命令:
make
如果,默认的配置正确make命令会顺利地把模块编译出来。可惜的是我的默认设置并不正确:)
首先报错,有工具找不到,于是用find命令找这些工具:
find / -name "***"
"***"代表工具文件名。结果发现默认生成的Makefile中,如下路径变量设置有问题:
top_builddir=/usr
在我的系统中正确的设置应该是:
top_builddir=/usr/share/httpd
编译报错,找不到httpd.h/apr.h等文件。
我的解决方法是,缺什么文件就用find命令找什么文件:
find / -name "***.h"
结果发现默认生成的Makefile中,Include的头文件目录不是很全,所以我补上了如下的目录
p, li { white-space: pre-wrap; } ADD_INCLUDE=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include INCLUDES=-I$(ADD_INCLUDE)/apache2 -I$(ADD_INCLUDE)/apr-1 -I$(ADD_INCLUDE)
最后是默认的环境中也有问题:
可能是因为我的Xcode升级了,C语言编译器的路径有所变化原来是:
/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/usr/bin/cc
变成了现在的:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
需要用如下命令查找:
cd /usr/share grep -r "/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain/" *
把查出来的内容都改成现在的路径。
3.2 QT Creator中的设置
QT Creator的安装很简单不冗述。下面用截图的方式说明如何导入当前已经生成的HelloApache
第一:
第二:
第三:
第四:
第五:
上面五步后,一路确定即可完成导入。要注意第三步中的路径要是已经存的HelloApache的路径。下面是导入成功后的工程结构截图:
其中Makefile及modules.mk是我手动加入的(主要是为了后面修改方使)。现你已经可以成功编译代码了。但如果你这里修修代码会发现,代码补全及代码跳转功能不能正常使用。这主要是没有设置HelloApache.includes文件的原因。HelloApache.includes中设置的include路径并不影响编译,但会影响代码补全及代码跳转。所以要把Makefile中的全部include路径都写进HelloApache.includes文件中去,我的机器上,本文件内容如下:
. /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/apache2 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/apr-1 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include
到此全部设置完成:)