- 论坛徽章:
- 0
|
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 |
|