免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 981 | 回复: 0
打印 上一主题 下一主题

OpenOffice.org构建库指导(2) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-29 18:53 |只看该作者 |倒序浏览
                OpenOffice.org构建库指导

               litzhang     
sdl@yunchengonline.com
2007.9.29
一旦build到达需要编译的独立子目录,它将进入每个子目录并调用dmake, 构建工具将采用makefile.mk
作为输入来编译。 如果makefile文件不存在,dmake将发生错误。

现在,我们如何修改它? :-) 我们可以从相邻工程寻找正确的makefile.mk, 拷贝并修改它来适应我们的
要求。
文件名: helloworld/source/makefile.mk
内容:
PRJ=..
PRJNAME=helloworld
TARGET=helloworld
# --- Settings ----------------------------------
.INCLUDE : settings.mk
# --- Files -------------------------------------
SLOFILES=\
       $(SLO)$/helloworld.obj
# --- Targets ----------------------------------
.INCLUDE : target.mk
内容说明helloworld.obj需要编译。再次"build":
build -- version: 1.130
/home/raul/HEAD/ooo-build/build/src680-m65/helloworld/source
dmake:  Error -- `../unxlngi4.pro/slo/helloworld.obj' not found, and can't be made
'---* tg_merge.mk *---'
ERROR: Error 65280 occurred while making /home/raul/HEAD/ooo-build/build/src680-
m65/helloworld/source
    为了产生同名的obj文件,dmake寻找同名的cxx文件,在不能找到源文件的情况下,抛出一个错误,编译中止

我们需要增加源文件。我们增加两个文件helloworld.hxx,和helloworld.cxx,目录及内容如下:
helloworld/inc/helloworld.hxx
namespace hello {
    namespace world {
       class HelloWorld {
       public:
           void adios();
           
       };
    };
};
helloworld/source/helloworld.cxx
#include
using namespace hello::world;
void HelloWorld::adios()
{
    fprintf( stderr, "Hello, World! :-)\n" );
}
包含的头文件用尖括号括起来,它从顶层的inc目录寻找。 如果使用引号,头文件将在当前目录寻找。
[ Stephan Bergmann 认为:#include "foo"首先从用户定义的头文件目录寻找foo, 如果没有发现将寻找编译器制
定的包含目录。#include仅仅寻找编译器制定的包含目录。(从一个标准的观点,这并不完全精确,但这里已
经足够了),对于我们在OOo中使用的所有编译器。我们从命令行设置了所有的OOo特定的包含目录加到了编译器制
定的包含目录,因此使用#include和#include"helloworld.hxx"应该没有什么不同。但作为编码
风格,我对于OOo的头文件 推荐使用"...",C++官方头文件(, ,)和系统头文件
使用 也可以看
http://www.openoffice.org/servlets/ReadMsg?list=dev&msgNo=8008
. ]
我们再次开始"build":
build -- version: 1.130
/home/raul/HEAD/ooo-build/build/src680-m65/helloworld/source
mkout -- version: 1.3
-----------------------------------------------
Making: ../unxlngi4.pro/misc/helloworld.dpc
dmake subdmake=true  -f makefile.mk  depend=t ALLDPC
Making : Dependencies
touch ../unxlngi4.pro/misc/helloworld.dpc
-----------------------------------------------
Making: ../unxlngi4.pro/slo/helloworld.obj
g++ -Wuninitialized -fmessage-length=0 -c -I.  -I. -I../inc -I../inc -I../unx/inc -
I../unxlngi4.pro/inc -I. -I/home/raul/HEAD/ooo-build/build/src680-
m65/solver/680/unxlngi4.pro/inc/stl -I/home/raul/HEAD/ooo-build/build/src680-
m65/solver/680/unxlngi4.pro/inc/external -I/home/raul/HEAD/ooo-build/build/src680-
m65/solver/680/unxlngi4.pro/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/unxlngi4/inc -
I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc -I/home/raul/HEAD/ooo-build/build/src680-
m65/res -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/stl -
I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc/Xp31 -I/usr/lib/SunJava2-1.4.2/include -
I/usr/lib/SunJava2-1.4.2/include/linux -I/usr/lib/SunJava2-1.4.2/include/native_threads/include -
I/usr/X11R6/include     -I. -I../res -I. -O1   -pipe -mcpu=pentiumpro -Wno-ctor-dtor-privacy -
include preinclude.h -fno-exceptions   -fpic -DLINUX -DUNX -DVCL -DGCC -DC300 -DINTEL -
DGXX_INCLUDE_PATH=/usr/include/g++ -DCVER=C300 -D_USE_NAMESPACE -DGLIBC=2 -DX86 -D_PTHREADS -
D_REENTRANT -DNEW_SOLAR -D_USE_NAMESPACE=1 -DSTLPORT_VERSION=400 -D__DMAKE -DUNIX -DCPPU_ENV=gcc3 -
DSUPD=680 -DPRODUCT -DNDEBUG -DPRODUCT_FULL -DOSL_DEBUG_LEVEL=0 -DOPTIMIZE -DEXCEPTIONS_OFF -DCUI -
DSOLAR_JAVA -DSRC680   -DSHAREDLIB -D_DLL_  -DMULTITHREAD  -o ../unxlngi4.pro/slo/helloworld.o
/home/raul/HEAD/ooo-build/build/src680-m65/helloworld/source/helloworld.cxx
if ( -e ../unxlngi4.pro/slo/helloworld.o) touch ../unxlngi4.pro/slo/helloworld.obj
-----------------------------------------------
Making: ../unxlngi4.pro/slb/helloworld.lib
echo unxlngi4.pro/slo/helloworld.o | xargs -n1 > ../unxlngi4.pro/slb/helloworld.lib
-----------------------------------------------
我们有了一个目标文件,但是我们要在不同的顶级工程如何使用这个目标文件。因此我们需要一个可链接的库。这
让我们在makefiel.mk中增加几行可以创建共享库的代码。
以下是添加的代码
SLOFILES=\
        $(SLO)$/helloworld.obj

SHL1TARGET=    hworld$(UPD)$(DLLPOSTFIX)
SHL1LIBS=      $(SLB)$/helloworld.lib
$UPD 和 $DLLPOSTFIX 是为了最终的共享库变成 libhworld680li.so, helloworld.lib包含用于链接的关键性符号
。再次'build':
build -- version: 1.130
/home/raul/HEAD/ooo-build/build/src680-m65/helloworld/source
mkout -- version: 1.3
-----------------------------------------------
Making: ../unxlngi4.pro/misc/helloworld.dpc
dmake subdmake=true  -f makefile.mk  depend=t ALLDPC
Making : Dependencies
touch ../unxlngi4.pro/misc/helloworld.dpc
-----------------------------------------------
Making: ../unxlngi4.pro/slo/helloworld.obj
g++ -Wuninitialized -fmessage-length=0 -c -I.  -I. -I../inc -I../inc -I../unx/inc -
I../unxlngi4.pro/inc -I. -I/home/raul/HEAD/ooo-build/build/src680-
m65/solver/680/unxlngi4.pro/inc/stl -I/home/raul/HEAD/ooo-build/build/src680-
m65/solver/680/unxlngi4.pro/inc/external -I/home/raul/HEAD/ooo-build/build/src680-
m65/solver/680/unxlngi4.pro/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/unxlngi4/inc -
I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc -I/home/raul/HEAD/ooo-build/build/src680-
m65/res -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/stl -
I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc/Xp31 -I/usr/lib/SunJava2-1.4.2/include -
I/usr/lib/SunJava2-1.4.2/include/linux -I/usr/lib/SunJava2-1.4.2/include/native_threads/include -
I/usr/X11R6/include     -I. -I../res -I. -O1   -pipe -mcpu=pentiumpro -Wno-ctor-dtor-privacy -
include preinclude.h -fno-exceptions   -fpic -DLINUX -DUNX -DVCL -DGCC -DC300 -DINTEL -
DGXX_INCLUDE_PATH=/usr/include/g++ -DCVER=C300 -D_USE_NAMESPACE -DGLIBC=2 -DX86 -D_PTHREADS -
D_REENTRANT -DNEW_SOLAR -D_USE_NAMESPACE=1 -DSTLPORT_VERSION=400 -D__DMAKE -DUNIX -DCPPU_ENV=gcc3 -
DSUPD=680 -DPRODUCT -DNDEBUG -DPRODUCT_FULL -DOSL_DEBUG_LEVEL=0 -DOPTIMIZE -DEXCEPTIONS_OFF -DCUI -
DSOLAR_JAVA -DSRC680   -DSHAREDLIB -D_DLL_  -DMULTITHREAD  -o ../unxlngi4.pro/slo/helloworld.o
/home/raul/HEAD/ooo-build/build/src680-m65/helloworld/source/helloworld.cxx
if ( -e ../unxlngi4.pro/slo/helloworld.o) touch ../unxlngi4.pro/slo/helloworld.obj
-----------------------------------------------
Making: ../unxlngi4.pro/slb/helloworld.lib
echo unxlngi4.pro/slo/helloworld.o | xargs -n1 > ../unxlngi4.pro/slb/helloworld.lib
cp -f /home/raul/HEAD/ooo-build/build/src680-m65/solenv/src/default_description.xml
../unxlngi4.pro/misc/hworld_dflt.xml
xml2cmp -func ../unxlngi4.pro/misc/hworld_dflt_description.cxx ../unxlngi4.pro/misc/hworld_dflt.xml
File ../unxlngi4.pro/misc/hworld_dflt_description.cxx with component_getDescriptionFunc() is created
now.
-----------------------------------------------
Making: ../unxlngi4.pro/slo/hworld_dflt_description.obj
g++ -Wuninitialized -fmessage-length=0 -c -I.  -I. -I../inc -I../inc -I../unx/inc -
I../unxlngi4.pro/inc -I. -I/home/raul/HEAD/ooo-build/build/src680-
m65/solver/680/unxlngi4.pro/inc/stl -I/home/raul/HEAD/ooo-build/build/src680-
m65/solver/680/unxlngi4.pro/inc/external -I/home/raul/HEAD/ooo-build/build/src680-
m65/solver/680/unxlngi4.pro/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/unxlngi4/inc -
I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc -I/home/raul/HEAD/ooo-build/build/src680-
m65/res -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/stl -
I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc/Xp31 -I/usr/lib/SunJava2-1.4.2/include -
I/usr/lib/SunJava2-1.4.2/include/linux -I/usr/lib/SunJava2-1.4.2/include/native_threads/include -
I/usr/X11R6/include     -I. -I../res -I. -O1   -pipe -mcpu=pentiumpro -Wno-ctor-dtor-privacy -
include preinclude.h -fno-exceptions   -fpic -DLINUX -DUNX -DVCL -DGCC -DC300 -DINTEL -
DGXX_INCLUDE_PATH=/usr/include/g++ -DCVER=C300 -D_USE_NAMESPACE -DGLIBC=2 -DX86 -D_PTHREADS -
D_REENTRANT -DNEW_SOLAR -D_USE_NAMESPACE=1 -DSTLPORT_VERSION=400 -D__DMAKE -DUNIX -DCPPU_ENV=gcc3 -
DSUPD=680 -DPRODUCT -DNDEBUG -DPRODUCT_FULL -DOSL_DEBUG_LEVEL=0 -DOPTIMIZE -DEXCEPTIONS_OFF -DCUI -
DSOLAR_JAVA -DSRC680   -DSHAREDLIB -D_DLL_  -DMULTITHREAD  -o
../unxlngi4.pro/slo/hworld_dflt_description.o ../unxlngi4.pro/misc/hworld_dflt_description.cxx
if ( -e ../unxlngi4.pro/slo/hworld_dflt_description.o) touch
../unxlngi4.pro/slo/hworld_dflt_description.obj
-----------------------------------------------
SHL1FILTERFILE not set!
-----------------------------------------------
dummy file to keep the dependencies for later use.
cp -f /home/raul/HEAD/ooo-build/build/src680-m65/solenv/src/version.c
../unxlngi4.pro/misc/hworld_dflt_version.c
-----------------------------------------------
Making: ../unxlngi4.pro/slo/hworld_dflt_version.obj
gcc -Wuninitialized -fmessage-length=0 -c -I.  -I. -I../inc -I../inc -I../unx/inc -
I../unxlngi4.pro/inc -I. -I/home/raul/HEAD/ooo-build/build/src680-
m65/solver/680/unxlngi4.pro/inc/dont_use_stl -I/home/raul/HEAD/ooo-build/build/src680-
m65/solver/680/unxlngi4.pro/inc/external -I/home/raul/HEAD/ooo-build/build/src680-
m65/solver/680/unxlngi4.pro/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/unxlngi4/inc -
I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc -I/home/raul/HEAD/ooo-build/build/src680-
m65/res -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/dont_use_stl -
I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc/Xp31 -I/usr/lib/SunJava2-1.4.2/include -
I/usr/lib/SunJava2-1.4.2/include/linux -I/usr/lib/SunJava2-1.4.2/include/native_threads/include -
I/usr/X11R6/include     -I. -I../res -I. -O1   -pipe -mcpu=pentiumpro -fpic -DLINUX -DUNX -DVCL -
DGCC -DC300 -DINTEL -DGXX_INCLUDE_PATH=/usr/include/g++ -DCVER=C300 -D_USE_NAMESPACE -DGLIBC=2 -DX86
-D_PTHREADS -D_REENTRANT -DNEW_SOLAR -D_USE_NAMESPACE=1 -DSTLPORT_VERSION=400 -D__DMAKE -DUNIX -
DCPPU_ENV=gcc3 -DSUPD=680 -DPRODUCT -DNDEBUG -DPRODUCT_FULL -DOSL_DEBUG_LEVEL=0 -DOPTIMIZE -
DEXCEPTIONS_OFF -DCUI -DSOLAR_JAVA -DSRC680   -DSHAREDLIB -D_DLL_   -o
../unxlngi4.pro/slo/hworld_dflt_version.o ../unxlngi4.pro/misc/hworld_dflt_version.c
if ( -e ../unxlngi4.pro/slo/hworld_dflt_version.o) touch ../unxlngi4.pro/slo/hworld_dflt_version.obj
-----------------------------------------------
Making: ../unxlngi4.pro/lib/libhworld680li.so
gcc -O2 -Bsymbolic -z combreloc -z defs -Wl,-rpath,'$ORIGIN' -shared -L../unxlngi4.pro/lib -L../lib
-L/home/raul/HEAD/ooo-build/build/src680-m65/solenv/unxlngi4/lib -L/home/raul/HEAD/ooo-
build/build/src680-m65/solver/680/unxlngi4.pro/lib -L/home/raul/HEAD/ooo-build/build/src680-
m65/solenv/unxlngi4/lib -L/usr/lib/SunJava2-1.4.2/lib -L/usr/lib/SunJava2-1.4.2/jre/lib/i386 -
L/usr/lib/SunJava2-1.4.2/jre/lib/i386/client -L/usr/lib/SunJava2-1.4.2/jre/lib/i386/native_threads
-L/usr/X11R6/lib ../unxlngi4.pro/slo/hworld_dflt_version.o
../unxlngi4.pro/slo/hworld_dflt_description.o -o ../unxlngi4.pro/lib/libhworld680li.so
../unxlngi4.pro/slo/helloworld.o -ldl -lpthread -lm -Wl,-Bdynamic -lstlport_gcc -lstdc++
rm -f ../unxlngi4.pro/lib/check_libhworld680li.so
mv ../unxlngi4.pro/lib/libhworld680li.so ../unxlngi4.pro/lib/check_libhworld680li.so
/home/raul/HEAD/ooo-build/build/src680-m65/solenv/bin/checkdll.sh -L../unxlngi4.pro/lib -L../lib -
L/home/raul/HEAD/ooo-build/build/src680-m65/solenv/unxlngi4/lib -L/home/raul/HEAD/ooo-
build/build/src680-m65/solver/680/unxlngi4.pro/lib -L/home/raul/HEAD/ooo-build/build/src680-
m65/solenv/unxlngi4/lib -L/usr/lib/SunJava2-1.4.2/lib -L/usr/lib/SunJava2-1.4.2/jre/lib/i386 -
L/usr/lib/SunJava2-1.4.2/jre/lib/i386/client -L/usr/lib/SunJava2-1.4.2/jre/lib/i386/native_threads
-L/usr/X11R6/lib ../unxlngi4.pro/lib/check_libhworld680li.so
Checking DLL ../unxlngi4.pro/lib/check_libhworld680li.so ...: ok
-rwxr-xr-x  1 raul users 7742 2005-01-11 13:14 ../unxlngi4.pro/lib/libhworld680li.so
-----------------------------------------------

We rock! :-)
我们生成的库在哪儿呢?靠直觉,应该在顶级helloworld工程的unxlngi4.pro目录下。名字为什么是这样的, unx
是平台, lng是操作系统和编译器,i表示处理器,4表示编译用户增长的版本(??), pro表示产品,所以
wntmsci10.pro也符合逻辑 :-) 指定这些的文件是solenv/config/ssrx645.ini和solenv/config/ssrc680.ini 可
是我还不知道一个src怎么变成srx :-D



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/12529/showart_392709.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP