CGI 技术指南

    技术2022-05-11  67

    目  录1.        关于CSP/eybuild        31.1        什么是CSP/eybuild?        31.2        CSP/eybuild是开源和免费的吗,如何获取?        31.3        CSP/eybuild适合我吗,它需要什么基础?        31.4        如何学习使用CSP/eybuild,需要哪些基础?        31.5        CSP/eybuild支持C++吗?        41.6        用CSP/eybuild比传统的C开发CGI有何优越性?        41.7        CSP/eybuild在嵌入式设备WEB开发的优势?        42.        CGI相关问题        52.1        什么是CGI,CSP/eybuild与CGI有什么关系?        52.2        eybuild生成的CGI运行时需要解释器吗?        52.3        CSP/eybuild支持FastCGI吗?        52.4        在eybuild中如何编写、编译FastCGI?        52.5        如何安装和配置FastCGI环境        63.        CSP相关问题        83.1        CSP是一种新的语言吗,文件的后缀必须是.csp吗?        83.2        CSP中能直接嵌入C++的语句吗,如何编译?        83.3        在文件编译器UltraEidt中如何高亮显示 CSP的语法?        83.4        CSP脚本引擎是怎么回事?        83.5        如何在Windows配置和使用CSP脚本引擎?        93.6        如何在Linux等使用脚本引擎?        94.        Windows上的配置与编译        104.1        如何在Windows上安装CSP/eybuild开发环境?        104.2        如何在VC++ 6中配置编译环境?        104.3        在VC++ 7、VC++ 8中配置编译环境?        104.4        什么是project-map工具,如何配置和使用?        115.        Linux上的配置与编译        125.1        如何在Linux上安装CSP/eybuild开发环境?        125.2        如何编译CSP/eybuild的示例项目?        125.3        如何配置项目的Makefile?        135.4        如何配置交叉编译环境的Makefile?        146.        其它问题        166.1        CGI程序是从哪里开始执行的?        166.2        什么是cspmap.map、rommap.map?        16附录:相关参考        171.        关于CSP/eybuild 1.1        什么是CSP/eybuild?CSP是C Language Service Page 的缩写,它是一种基于C/C++语言的脚本开发技术。跟ASP、JSP、PHP等类似,我们可以直接将C/C++语句嵌入到HTML/XML等模板文件中来编写动态网页。eybuild是CSP脚本及其相关开发套件的总称。它能自动将CSP页面及其相关文件(CSS/JS/GIF/JPG等)编译成C/C++源程序,并链接eybuild平台库生成可以在目标系统上直接执行的CGI程序。另外,CSP/eybuild为CGI应用程序开发提供了很多高级功能,如多文件同时上传、虚目录、数据压缩、脚本引擎、平台移植等特性。1.2        CSP/eybuild是开源和免费的吗,如何获取?CSP/eybuild不是一个开源的项目,如果你是个人使用或出于学习、研究目的你可以从eybuild的官方站点http://www.eybuild.com 免费下载,或发邮件到 eybuild@hotmail.com 免费索取。如果你想在你的嵌入式设备的开发板上试用或出于学习和研究目的,你也可把您目标板及编译环境的详细资料发给eybuild@hotmail.com,请求为你的目标板单独制作一份交叉编译开发的CSP/eybuild平台。如果你想你的商用产品或项目中使用CSP/eybuild,你必须在CSP/eybuild的商用授权后才可使用。商用授权后您将可以得到很好的技术支持和技术培训。关于商用授权的详细流程,可邮件至eybuild@hotmail.com 垂询。1.3        CSP/eybuild适合我吗,它需要什么基础?CSP/eybuild是一个专注于用C语言进行WEB产品开发的开发工具。它秉承了特C/C++语言的通用、高效、灵活等特性,生成的CGI程序具有高效、高可靠、精巧等特性。适用下列项目和用户:1.        嵌入领域设备开发2.        服务器WEB应用,尤其对性能有高目标追求的WEB应用3.        具有一定C语言基础,希望用C进行WEB开发的用户4.        以学习和研究为目或希望深入理解WEB技术的学生、开发人员、研究机构1.4        如何学习使用CSP/eybuild,需要哪些基础?使用CSP/eybuild需要具备下列基础:1.        熟悉C/C++语言,具有一定的Windows或Linux上的C/C++开发经验2.        有一定的WEB技术基础,并能熟练应用HTML、CSS、JavaScript3.        熟悉B/S(Browser/Server)开发模型在使用CSP/eybuild之前请先读下《CSP/eybuild中文手册》,其中包含很多使用示例。另外,很多问题的答案在本FAQ中都能找到。1.5        CSP/eybuild支持C++吗?是的,CSP/eybuild不仅对C有很好的支持,对C++也有同样好地支持。在CSP源文件中你可以随意嵌入C或C++。只要编译时加“-cpp”选项即可。请参阅本FAQ中Windows/Linux上的配置与编译的相关章节。1.6        用CSP/eybuild比传统的C开发CGI有何优越性?传统用C做CGI的方法是直接使用printf() 等标准I/O函数输出HTML代码,这样不但使得C程序和HTML程序交织的混乱不堪,还使得页面输出的流程控制变得非常复杂。CSP与之不同,它充分吸取了ASP/JSP/PHP等以HTML/XML为模板嵌入脚本语言优点,并充分融合C语言的语言特性。使得CSP的开发更快速、更高效,同时还大大提了最终代码的可读性和维护性。1.7        CSP/eybuild在嵌入式设备WEB开发的优势?CSP 设计的最原始的初衷,就是要为嵌入式开发定制的一套类似 ASP/JSP/PHP的C语言开发工具。针对设备WEB开发CSP提供了丰富的平台库和开发工具,它们为设备系统的WEB交叉开发和移植提供了有力的支持。交叉开发是指在一个系统直接开发和调试另一个系统上的应用。通过交叉开发,可以在其它硬功件平台完全未准完毕的情况下进行高层软件的开发。这不仅能为产品开发有效地节约软硬件资源,还为WEB程序提供简单有效地调试工具。2.        CGI相关问题2.1        什么是CGI,CSP/eybuild与CGI有什么关系?CGI是Common Gateway Interface(通用网关接口)的简称,是WEB服务器与WEB应用程序间的一个协议标准。它规定:CGI程序可以从系统环境变量和标准输入获取输入,CGI程序可以通过标准输出进行输出。这样,CGI应用程序不仅可以用C/C++等高级语言进行开发,还适合各种脚本语言进行开发(如: PERL等)。CSP/eybuild是一个严格遵守CGI/1.1标准的CGI程序的开发工具。它不像传统的CGI开发方式,在程序代码中直接使用标准输出函数将HTML/XML代码逐行地输出;而是像ASP/JSP/PHP等一样允许直接将C/C++程序代码嵌入到HTML/XML模板文件中。同时,它还能为动态页面和静态文件在一个CGI程序中生成目录,即将若干动态和静态文件集成到一个CGI程序中。如将一个设备上的整个管理程序集成在一个CGI程序中。2.2        eybuild生成的CGI运行时需要解释器吗?不需要。eybuild生成的CGI就是一个可以执行的二进制机器码,所以它不需要任何脚本解释器或脚本引擎。正因为如此,才能具有非常高的执行效率。2.3        CSP/eybuild支持FastCGI吗?是的,CGI/eybuild开发应用程序对FastCGI具有非常好地支持,而且全部代码都可以在线程中安全调用。CSP/eybuild为支持FastCGI做了非常精巧地设计,你只要在原来的CGI程序中加入几句代码就可以变成FastCGI程序。另外,CSP/eybuild还提供的编译选项HAVE_FASTCGI,可以使原有的CGI源程序在不作任何修改的情况下在CGI与FastCGI程序间切换,这使得编写FastCGI程序更容易2.4        在eybuild中如何编写、编译FastCGI?编写FastCGI程序与普通CGI程序几乎完全一样。一般地,你可以把普通CGI程序直接作为FastCGI编译运行,只需要在编译选项中添加对HAVE_FASTCGI宏的定义即可。如在VC++的编译选项中添加:/DHAVE_FASTCGI;在gcc 的编译环境中添加 -DHAVE_FASTCGI。注意,不要忘记安装FastCGI环境。在VC++编译示例程序时,你可以按下面的方法选择FastCGI编译配置:1.        在工具栏上单击右键,右键菜单中选择Build工具栏2.        在活动配置下拉框中,选择“Win32 DebugFastCGI” 或“Win32 ReleaseFastCGI”3.        重新编译项目使用gcc编译示例程序时,可以按如下方法修改Makefile:1.        打开Makefile2.        删除“# HAVE_CPLUSPLUS = TRUE”前的“#”,保存3.        make clean all2.5        如何安装和配置FastCGI环境支持FastCGI的WEB服务器很多,这里选择Linux和Windows的Apache 2环境为例,有关FastCGI的基础知识请参阅 FastCGI Developer's Kit和FastCGI Programmer's Guide。在安装之前,请先打开FastCGI的官方网站(见http://www.fastcgi.com/dist/ )下载最新版的 FastCGI开发包 fcgi-2.4.0.tar.gz 和FastCGI 的Apache 模块 mod_fastcgi-2.4.2.tar.gz(Windows 环境下直接下载编译好的mod_fastcgi-2.4.2-AP20.dll)。1、        在Windows 环境下安装FastCGI(1)        解压开fcgi-2.4.0.tar.gz到一个目录,如放在E:/fcgi-2.4.0(2)        从命令行切换到目录E:/fcgi-2.4.0:cd /d E:/fcgi-2.4.0(3)        从命令行编译FastCGI 工具包:nmake –f Makefile.nt(4)        这时,就会在E:/fcgi-2.4.0/libfcgi/Release目录生成两个文件“libfcgi.dll”和“libfcgi.lib”(5)        将“libfcgi.dll”复制到 Windows系统目录(如system32 目录下),因为每个FastCGI应用程序执行时都会调用该动态库。(6)        编译FastCGI 应用程序时需要连接静态库“libfcgi.lib”,将它复制到一个特定的目录中,以方便所有项目引用。(7)        E:/fcgi-2.4.0/include是FastCGI开发包的头文件,将它复制到一个特定的目录中,以方便所有项目引用。(8)        将下载好的 mod_fastcgi-2.4.2-AP20.dll复制到Apache2的module 目录中说明:$(EYBUILD_BASE)/fastcgi/ 目录就是按以上步骤定做好的FastCGI,在Windows 环境下设置好环境变量FASTCGI_BASE后可以直接使用。2、        在Linux 环境下安装FastCGI(1)        解压开fcgi-2.4.0.tar.gz:tar –xzf  fcgi-2.4.0.tar.gz(2)        执行配置和安装命令:./configuremake install(3)        OK,安装完毕。这时头文件和库文件已经被复制到系统目录。(4)        解压开mod_fastcgi-2.4.2.tar.gz:$tar –xzf  mod_fastcgi-2.4.2.tar.gz$cd mod_fastcgi-2.4.2$cp Makefile.AP2 Makefile$make$make install(5)        如果Apache的安装目录非“/usr/local/apache2”的话,则需要手工将“.libs/mod_fastcgi.so”复制到Apache的module目录中去。3、        在Apache上配置FastCGI(1)        打开Apache配置文件“httpd.conf”(2)        添加LoadModule fastcgi_module modules/mod_fastcgi-2.4.2-AP20.dll(3)        添加AddHandler fastcgi-script .fcgi(4)        添加FastCGI目录及权限:ScriptAlias /fcgi-bin/ "F:/website/fcgi-bin/"<Directory "F:/website/fcgi-bin">    AllowOverride None    Options None    Order allow,deny    Allow from all</Directory>(5)        重新启动 Apache4、        测试FastCGI 环境(1)        在Windows或Linux环境下打开 $EYBUILD_BASE/project/目录中的项目文件,调整编译选并将文件生成到上面配置的目录中(如生成 demo.fcgi)(2)        打开浏览器,输入地址:http://127.0.0/fcgi-bin/demo.fcgi(3)        重复执行该地址,观察计数器是否在不断增加。3.        CSP相关问题3.1        CSP是一种新的语言吗,文件的后缀必须是.csp吗?CSP是C Language Service Page 的缩写,它不一种的新的语言。它是能直接将C/C++语句插入到HTML/XML等模板文件中脚本格式。它的语法非常简单, ASP/JSP一样通过<% %>标记嵌入C语句,如 <% print(“Hello world/n”); %>。关于CSP的语法细节,请参阅《CSP/eybuild中文手册》。为与其它源文件进行区分,CSP源文件通常以.csp为后缀。但这不是必须的。3.2        CSP中能直接嵌入C++的语句吗,如何编译?是的,你可以直接在CSP源文件中使用C++,与使用C语句的过程一模一样。只是在配置编译环境是略有不同。在VC++下可以在project-map工具中添加命令参数“-cpp”。在gcc的编译环境中,直接示例程序Makefile中将“# HAVE_CPLUSPLUS = TRUE”前的“#”删除即可。关于配置各种系统下的编译环境,请参阅本FAQ中Windows/Linux上的配置与编译的相关章节。3.3        在文件编译器UltraEidt中如何高亮显示 CSP的语法?1.        打开 "高级" 菜单 --> "语法高亮" 选项卡2.        选择"打开" 文件 WORDLIST.TXT (一般在UtralEdit的安装目录,如: C:/Program Files/UltraEdit/WORDFILE.TXT). 3.        在WORDFILE.TXT中查找 "HTML",找到第一个。4.        在"File Extensions ="的末尾加上 "CSP" 即可. 最终结果类似下面:/L3"HTML" Nocase Noquote HTML_LANG Block Comment On = <!-- Block Comment Off = --> Block Comment On Alt = <%& Block Comment Off Alt = %> String Chars = "' File Extensions = HTM HTML ASP SHTML HTT HTX JSP CSP 3.4        CSP脚本引擎是怎么回事?CSP脚本引擎(cspengine)是一个自动化工具,它能自动将CSP程序编译生成可执行的CGI模块,并加载CGI模块进行执行。这样就允许你,不手工把CSP文件编译成CGI程序的情况下,即可以运行CSP文件。通过CSP脚本引擎,你就可以在命令行或浏览器直接运行、调试CSP脚本文件。CSP脚本的执行过程跟JSP一样,在CSP第一次获得请求时,CSP文件将会CSP引擎(cspengine)编译成一个可执行程序的片断。在编译时候如果发现CSP文件有任何语法错误,转换过程将中断并向客户端发出错信息;如果编译成功,可执行程序的片断将被CSP引擎加载到内存中,得以执行。对于所有的随后而来的对该CSP文件的请求,服务器将检查该.csp文件自最后一次被存取后是否经过修改。如果没有修改则直接加载和执行先前编译生成好的可执行程序的片断;如果.csp文件被修改了,CSP引擎将自动地对文件重新编译,并将结果取代原来的可执行程序片断,并继续上述处理过程。3.5        如何在Windows配置和使用CSP脚本引擎?1.        确保系统安装了VC6或VC7或VC82.        EYBUILD_BASE=E:/eybuild 加入环境变量中3.        将环境变量 %EYBUILD_BASE%/bin 加入到 PATH中,path=%EYBUILD_BASE%/bin;%path%4.        编辑%EYBUILD_BASE%/bin/clink.bat,并正确设置VC++的路径,如:call "C:/Program Files/Microsoft Visual Studio/VC98/bin/VCVARS32.BAT"5.        进行完上面的设置就可以在命令行或浏览器上直接运行 cgi-bin 目录中的CSP文件了,如在命令上执行:C:/>cspengine f:/website/cgi-bin/test.csp。6.        在浏览器的地址中输入 http://127.0.0.1/cgi-bin/test.csptest.csp 的内容如下(输出15次“Hello world.”):#!/usr/bin/cspengine<html><body><% !!int                 i;        for (i=0; i<15; i++) {%>        <b><% =$i %>. </b>Hello world.<br><%         } %></body></html> 3.6        如何在Linux等使用脚本引擎?示例程序同上例,步骤如下:1.        确保系统安装了GCC 2.9.2以上的版本2.        确保系统中正确安装了CSP/eybuild3.        打开CSP源文件,确保第一行的内容为:#/usr/bin/cspengine4.        给csp文件执行权限,如 chmod a+x /var/www/cgi-bin/test.csp5.        OK,至此就可以执行该CSP文件了,如:$cspengine /var/www/cgi-bin/test.csp 或$/var/www/cgi-bin/test.csp6.        打开WebServer,如Apache、lighttpd、boa、goAhead、thttpd、mini-httpd均可7.        从浏览输入地址,如http://192.168.0.1/cgi-bin/test.csp4.        Windows上的配置与编译4.1        如何在Windows上安装CSP/eybuild开发环境?1.        将eybuild开发包eybuild-xx-yy-zz.tar.gz解压到一个目录,如E:/eybuild2.        设置eybuild的根目录的环境变量EYBUILD_BASE,如EYBUILD_BASE=E:/eybuild,可采用下面的方法:A. 从菜单“开始设置控制面板系统”打开系统属性对话框B. 从“高级”选项卡上点击“环境变量”按钮C. 可根据需要在“用户变量”或“系统变量”将EYBUILD_BASE正确添加进去3.        用第2步的方法,将eybuild/bin目录添加到环境变量PATH中,如:PATH=%path%;E:/eybuild/bin4.2        如何在VC++ 6中配置编译环境?1.        首先执行下domap.bat 以将CSP源程序编译成C程序。2.        打开VC++,创建一个空的Win32 Console Application项目。项目名为demo.dsp3.        将/demo/cspsrc/csp_maplist.c和/demo/cspsrc/rom_maplist.c添加到工程中(注意,不要将/demo/cspsrc/csp_p/中的文件添加到项目)4.        添加头文件搜索路径,方法是:打开Project  Setting C/C++ 选项卡,在分类(Category)下拉框中选择Preprocessor,并在Additional include directories:中添加:$(EYBUILD_BASE)/include5.        添加eybuild.lib库的搜索路径,方法是:打开Project  Setting Link 选项卡,在分类(Category)下拉框中选择General,并在Object/library modules:输入框最后(项与项之间用空格分隔)添加项$(EYBUILD_BASE)/lib/eybuild.lib6.        编译完毕,默认的会在demo/win32/debug目录生成一个可执行文件demo.exe。7.        可以用上面添加eyBuildLib库的搜索路径的方法,在同一选项页里的“Output file name:”输入框里改变量输出文件名字和路径(如改为:d:/cgi-bin/demo.cgi)。4.3          在VC++ 7、VC++ 8中配置编译环境?1.        添加“配置属性-->C/C++ -->常规 --> 附加包目录 ”添加包含目录:$(EYBUILD_BASE)/include"2.        在"配置属性-->链接器 -->输入 --> 附加依赖库“中添加eybuild库:"$(EYBUILD_BASE)/lib/eybuild.lib"3.        在“配置属性-->C/C++ --> 代码生成 -->运行时库”中选择 ,“多线程(/MT)” 或 “多线程调试 (/MTd)”4.        在“配置属性-->链接器 -->输入 --> 忽略特定库”中添加 libc5.        在"配置属性-->C/C++ -->预处理器 -->预处理器定义" 中添加宏定义:_USE_32BIT_TIME_T以关闭掉 64 位的 time_t 类型4.4        什么是project-map工具,如何配置和使用?在 Windows VC++等图形化开发环境中,每次修改CSP文件后都要到相应 win32目录下运行domap.bat 以将CSP 文件编译成 C文件,这是一个重复而繁琐的过程。我们可以使用 project-map工具动态地定位要执行domap.bat,以简化操作步骤。下面介绍下如何将 project-map 添加到 VC++ 的工具栏上,以快速编译CSP文件:(1)        从菜单打开“ToolsCustomize…”打开话框,并切换到“Tools”选项卡(2)        在“Menu Contents:”最后新建一个菜单项,名字取作“project-map”(3)        在“Command:”中输入project-map所在的路径(或点击右边的按钮选择),如“E:/eybuild/bin/project-map.bat”(4)        在“Arguments:”中输入“"$(WkspDir)"”,注意$(WkspDir)两边加上双引号(5)        选中“Use Output Window”复选框(6)        切换到“Commands”选项卡,从“Category:”中选择“Tools”,在对话框的右边将第8个工具图标拖到工具栏适到的位置。(7)        这样每次编译CSP项目中的CSP 文件,直接单击该按钮即可。project-map 能根据当前项目所在的目录定位 domap.bat 所在的路径并执行之。project-map命令行格式如下:Usage: project-map [base-dir] [-cpp] [-d|-d0|-d1] [-d]  base-dir         - project current directory, example: "$(WkspDir)  -cpp            - csp2bin compile for C++, see csp2bin  -d*             - csp2bin compress or not  -d              - web2bin compress or not其中的 –cpp 用于编译生成支持 C++ 的项目文件, -d 用于编译生成支持压缩的项目文件。

     5.        Linux上的配置与编译5.1        如何在Linux上安装CSP/eybuild开发环境?单用户在使用 eybuild 环境时,也可以直接解压eybuild压缩包在任意目录,然后正确配置用户环境。如某用户xxx的.bash_profile参考配置如下:export EYBUILD_BASE=/home/xxx/eybuildexport PATH=$PATH:$EYBUILD_BASE/bin多个用户在同一台服务器同时使用 eybuild 环境时,可按照如下方法安装配置CSP/eybuild环境:(1)        使用超级用户(root)登录, 并切换到 /usr/local/目录:cd /usr/local/(2)        解压 eybuild 压缩包:tar -xzf eybuild-x86-1.1.2.tar.gz(3)        解压 eybuild 压缩包到当前目录(/usr/local/eybuild):tar -xzf eybuild-x86-1.1.2.tar.gz(4)        切换到 eybuild 目录,改变目录权限:chown root:root eybuild -R   chmod 755 eybuild -R    chmod 777 eybuild/csp_prj/(5)        为CSP脚本引擎创建符号连接:ln -fs /usr/local/eybuild/bin/cspengine /usr/bin/cspengine(6)        退出超级用户,用普通用户登录:(7)        配置用户环境,打开.bash_profile,并添加如下内容:export EYBUILD_BASE=/usr/local/eybuildexport PATH=$PATH:$EYBUILD_BASE/bin(8)        配置完毕,重新登录即可5.2        如何编译CSP/eybuild的示例项目?在CSP/eybuild的Makefile中定义了如下伪目标:clean        - 清除目标文件和中间文件default        - 编译的默认目标,不进行依赖性all        - 重编译全部内容depend        - 对源文件进行信赖性检查ar        - 把目标编译成 .a 文件strip        - 清除目标文件中的符号信息等我可以按如下方式,编译常用到如下(1)        重编译全部,可以使用:make clean all或make clean all strip(2)        把目标编译成 .a 文件:make arall或make ar5.3        如何配置项目的Makefile?通常,用户总可以直接以 eybuild/project/*/unix 目录中Makefile为模板,为新项目创建Makefile。其中的*代表,示例的项目名称。如下展示了一个可以用的 Makefile示例:# FastCGI Support Option# HAVE_FASTCGI        = TRUE# HAVE_CPLUSPLUS        = TRUE# HAVE_CSP_COMPR        = TRUE# HAVE_ROM_COMPR        = TRUE## FCGI_SPEC     where FastCGI target store to# ARCHIVE_SPEC  where archive target store to# FILTER_LIST   create archive, filter out following objs#TARGET_FILE        = demo.cgi FCGI_SPEC        = .ARCHIVE_SPEC= .FILTER_LIST = FASTCGI_LIB        = /usr/local/lib/libfcgi.a# source listSRCBASE        = ..SRCS        = $(SRCBASE)/cgimain.c# insert compile tools here#REDEF_TOOLS = TRUE# insert more compile options hereCFLAGS = -O2 -ansi -Wall -DREMOVE_NOUSED_WARNING# make rules-include ../cspsrc/.csp_maplist-include ../cspsrc/.rom_maplistinclude  $(EYBUILD_BASE)/bin/make.rule#insert more target dependence here# MAKE_PRE_RULE        = # MAKE_POST_RULE        = 选项意义如下:HAVE_FASTCGI        - FASTCGI 选项,值为 TRUE 时表示打开HAVE_CPLUSPLUS        - C++支持选项,值为 TRUE 时表示打开HAVE_CSP_COMPR        - CSP 压缩选项,值为 TRUE 时表示打开HAVE_ROM_COMPR        - 静态文件压缩选项,值为 TRUE 时表示打开TARGET_FILE        - 目标文件的路径和名称,如 /var/www/cgi-bin/demo.cgiARCHIVE_SPEC        - 目标文件为”.a”格式时的输出路径FILTER_LIST        - 目标除去的文件的列表FCGI_SPEC        - FASTCGI 目标文件的输出路径,如 /var/www/fcgi-bin/FASTCGI_LIB        - FASTCGI库所在的目录SRCBASE        - 源文件的目录(被 SRCS引用)SRCS        - 源文件列表REDEF_TOOLS        - 重定向工具列表,用于交叉编译CFLAGS        - 自定义CLFAGS 编译选项MAKE_PRE_RULE        - 编译前执行的外部命令MAKE_POST_RULE        - 编译后执行的外部命令,如复制目标文件如下内容是必须的,用于引入CSP相关的源文件和编译规则:-include ../cspsrc/.csp_maplist-include ../cspsrc/.rom_maplistinclude  $(EYBUILD_BASE)/bin/make.rule需要说明的是,MAKE_POST_RULE通常用于生成目标文件(CGI或FastCGI)后执行必要的用户命令。例如,把目标文件复制到指定的目录。另外,在嵌入式设备开发中常可以把Makefile与sendfile命令相结合,即直接把生成的目标文件通过 ftp传送到设备的cgi-bin目录(sendfile位于eybuild/bin/目录,相关用法可参考 sendfile –help):MAKE_POST_RULE = sendfile demo.cgi /www/cgi-bin/demo.cgi 192.168.0.1 user user5.4        如何配置交叉编译环境的Makefile?上节提到,REDEF_TOOLS选项设为TRUE用于交叉编译环境。当该选项为TRUE时,添加类似如下内容即可(下文示例了如何配置 ARM 和 ARM xscale_be的交叉编译环境):# insert compile tools hereREDEF_TOOLS = TRUEPREFIX        = xscale_be-#PREFIX        = arm-linux-CC      = $(PREFIX)gccCXX     = $(PREFIX)g++AR      = $(PREFIX)arLD      = $(PREFIX)ldSTRIP   = $(PREFIX)stripifeq (TRUE, $(REDEF_TOOLS))ifeq (xscale_be-, $(PREFIX))        LIBEYBUILD        = $(EYBUILD_BASE)/lib/libeybuild_xscale.a else ifeq (arm-linux-, $(PREFIX))        LIBEYBUILD        = $(EYBUILD_BASE)/lib/libeybuild_arm.a endifendifendif选项意义如下:REDEF_TOOLS         - 为TRUE时重定义工具链,否则下面的定义将不被使用PREFIX        - 定义交叉编译工具链的前缀LIBEYBUILD        - 指示eybuild交叉编译平台的库路径和名称6.        其它问题6.1        CGI程序是从哪里开始执行的?CGI 程序总是 cgimain() 开始的,它定义在 cgimain.c中。cgimain()功能和格式与main()函数几乎完全相同。在这个函数里,你需要初始化一些必要的初始化设置(如设置默认主面等),然后调用函数eyBuildExec()。eyBuildExec()执行请求的分发与处理工作,即把请求转送到被请求的页面。6.2        什么是cspmap.map、rommap.map?map文件定义了CSP源文件与生成目标CGI内部的虚目录的映射关系。通过该文件,CSP编译器和静态文件编译器才知道哪些文件需要被编译,编译后将放置到哪个虚目录的中去。如下面是一个简单的CSP映射规则:# source directory          virtual directory# ------------------        ------------------csp/*.csp        ==>  /demo/它将告诉编译器,把 csp 目录的所有以 .csp为扩展名的文件编译并映射到 /demo/目录。假设在csp/目录存在文件 test.csp,那么如果 csp 源文件中我们可以按如下方式引用这个csp 文件:<% =cgiPrefix(NULL) %>/demo/test.csp更多cspmap.map和rommap.map的详细规则,请参阅《eybuild 中文手册》。附录:相关参考 1. CSP/eybuild 的主站点:http://www.eybuild.com 2.《eyBuild 中文手册》 下载地址:    http://www.eybuild.com/develop/doc/manual/eybuild_manual_ch.pdf 3.《CSP/eybuild APIs参考》, 在线阅读:    http://www.eybuild.com/develop/doc/API/libIndex.htm 4. CSP/eybuild API 函数列表, 在线阅读:    http://www.eybuild.com/develop/doc/API/rtnIndex.htm 5.《CSP/eybuild FAQ(常见问题)》 下载地址:    http://www.eybuild.com/develop/doc/manual/eybuild_faq_ch.pdf


    最新回复(0)