创建应用程序
创建用户applications目录, 创建HelloWorld目录作为应用程序的源代码目录
1 2 3 4
| $ mkdir –p $FOAM_RUN/../applications $ cd $FOAM_RUN/../applications $ mkdir HelloWorld $ cd HelloWorld
|
源程序文件
1 2 3 4 5 6 7 8 9
| #include "fvCFD.H" int main(int argc, char* argv[]) { Info << "Hello world!" << endl; Info << "Dear FOAMers," << nl << "I come from Wuhan, China" << endl; return 0; }
|
编写Make文件,包括Make/files和Make/options。
1 2 3
| HelloWorld.C EXE = $(FOAM_USER_APPBIN)/HelloWorld
|
1 2 3 4 5 6
| EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = -lfiniteVolume \ -lmeshTools
|
使用wmake编译
运行程序
这里可以直接使用HelloWorld命令,而不给全它的路径,是因为其所在的$FOAM_USER_APPBIN目录已经在PATH环境变量里面了。
创建并链接动态库
下面我们开始创建一个叫MyLib的动态链接库,里面有两个简单函数。之后在HelloWorld程序里面调用这两个库函数。
MyLib库的源代码就在HelloWorld目录里面创建:
接着在MyLib目录里面创建库的源程序和头文件。首先看MyLib库的头文件,
1 2 3 4 5 6 7 8
| #ifndef MyLib_H #define MyLib_H #include "fvCFD.H" void funA(); void funB(); #endif
|
再看库的源文件
1 2 3 4 5 6 7 8 9 10 11
| #include "MyLib.H" void funA() { Info << "I'm from MyLib, funA()" << endl; } void funB() { Info << "I'm from MyLib, funB()" << endl; }
|
最后为这个库的写Make文件如下
1 2 3
| MyLib.C LIB = $(FOAM_USER_LIBBIN)/libMyLib
|
1
| $ cat MyLib/Make/options
|
1 2 3 4 5 6
| EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = -lfiniteVolume \ -lmeshTools
|
现在可以用wmake编译这个生成动态链接库了,在HelloWorld目录执行
或者进入MyLib目录执行wmake libso
都可以。编译成功后会提示生成的动态链接库文件会存放在$FOAM_USER_APPBIN目录。
接下来我们在HelloWorld里面使用MyLib这个动态链接库的funA()
和funB()
函数。当然先要在HelloWorld.C里面包含头文件”MyLib.H”,
1 2 3 4 5 6 7 8 9 10
| #include "fvCFD.H" #include "MyLib.H" int main(int argc, char* argv[]) { ... funA(); funB(); ...
|
在HelloWorld的Make/options
里面添加MyLib库的位置(-L选项)、库头文件位置(-I)、库文件(-l)
1 2 3 4 5 6 7 8 9 10
| EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -IMyLib/lnInclude EXE_LIBS = \ -L$(FOAM_USER_LIBBIN) \ -lfiniteVolume \ -lmeshTools \ -lMyLib
|
重新编译HelloWorld
最后运行
输出如下结果
1 2 3 4
| Dear FOAMers, I come from Wuhan, China I'm from MyLib, funA() I'm from MyLib, funB()
|
DONE!!!