一 概述:
本文说述的是在苹果机器上搭建Apache模块开发环境的方法,选用的IDE是QT Creator。实质上,我最开初是选用CodeBlocks进行搭建,并且搭建成功了。但CodeBlocks当前的13.12版本在Mac的机器上很不稳定(CodeBlocks官网就特别地说明过这一点)。我使用时发现其启动较慢,运行过程中老是闪退等问题,于是才改用QT Creator。这里要声明的是,我在Windows及Linux上使用CodeBlocks,其表现很稳定,功能也是很强的,所以我才第一个选他。本文并不会涉及Apache的安装及其开发工具的安装。因为Mac系统本身已经自带了Apache及其开发工具。如果有朋友想CodeBlocks搭建Apache模块开发环境,可以在这里留个言。
本文后记补充了在ubuntu上搭建环境时的注意点。
二 需求描述
* (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_srcdir=/usr
top_builddir=/usr
在我的系统中正确的设置应该是:
top_srcdir=/usr/share/httpd
top_builddir=/usr/share/httpd
编译报错,找不到httpd.h/apr.h等文件。
我的解决方法是,缺什么文件就用find命令找什么文件:
find / -name "***.h"
结果发现默认生成的Makefile中,Include的头文件目录不是很全,所以我补上了如下的目录
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
到此全部设置完成:)
---------------------------------------------------
后记:
因为测试的需要,我有在ubuntu又搭建了开发环境。下面记录要点:
1 建议不要用命令:
sudo apt-get install lamp-server^
安装。原要用源代码安装。用apt命令全自动安装LAMP,或者对于开发PHP网店来说挺方便。但对于直接开发apache模块开说,是十分不便的。这主要做现在配置可选功能上。例如,用apt命令安装的apache默认是不支持DBD的MySQL接口的。自动安装的情况下,用DBD接口对MySQL进行操作时,老是报错说找不到“apr_dbd_mysql.so”,而事实上这个文件已经安装到正确的位置上。自动安装的情况下,DBD默认只支持sqlite3的接口。
2 编译安装Apache
除了下载Apache的主程序httpd外,还要下载apr及apr-util。用下面的方法编译安装Apache(以支持DBD:MySQL接口为例)
./configure --prefix=/usr --enable-module=shared --with-apr=/usr --with-mysql=/usr --with-included-apr
make
sudo make install
--prefix=/usr 指定Apache安装路径
--enable-module=shared 这个设置最好不要省略,要不然在运行PHP时会出问题。
--with-apr=/usr apr的安装路径
--with-mysql=/usr mysql的安装路径
--with-included-apr 这个选项是为了适配apr及apr-util的版差异。
apr及apr-util解压出来后,其目录去版本号后,放入到httpd解压目录的srclib子目录中去。
3 httpd.conf及apache2.conf的位置
我查了网上的信息,还挺多人问这个路径问题。大家不认妨试试如下命令:
sudo apachectl -V
这样可以查在编译时默认设置的配置文件路径在那里。
4 .gdbinit不调用问题
这个涉用ubuntu的安全启动。解决这个问题最简单方法是把“r -X”设置到这里:
工具 菜单-》选项-》调试器-》GDB-》额外的启动命令
5 单步调试时报错说找不到“apr_dbd_mysql.so”
这其实是环境变量没有设置好引发的问题。不妨用“sudo”运行如下脚本,以便启动QT Creator,即可解决问题:
#!/bin/bash
#envvars是环境变量的设置脚本。我是在/usr/bin/apachectl这个脚本中找到envvars的路径的。
source /usr/bin/envvars
#QT Creator程序路径。用来启动QT Creator
/home/jackey/Qt5.3.2/Tools/QtCreator/bin/qtcreator
其它设置与mac上的设置类似,不冗述。