Code of the Week #35: Make/options

#201922

OpenFOAM 使用 wmake 来编译库和执行程序。wmake 需要 Make 文件夹以及其下的 filesoptions 两个文件。

包含头文件

对于编译来说,首先是需要一些头文件,怎么查找头文件呢?OpenFOAM 一般是按照下面的顺序来的:

  1. 文件夹 $WM_PROJECT_DIR/src/OpenFOAM/lnInclude
  2. 当前文件夹的 lnInclude
  3. 当前文件夹
  4. $WM_PROJECT_DIR/wmake/rules/$WM_ARCH/ 指定平台依赖的包
  5. 其他文件夹由 Make/options 文件的 -I 指定,其格式为
EXE_INC = \
    -I \
    -I \
    -I

链接库文件

由于很多共享的库是可以重用的,因此,没有必要全部都写到可执行文件 (求解器) 中,就需要将求解器与共享的库建立连接,以便使用,共享库的查找路径为:

  1. 文件夹 $FOAM_LIBBIN
  2. $WM_DIR/rules/$WM_ARCH 指定的平台依赖的库
  3. 其他由 Make/options 文件指定的文件夹

库的实际文件必须由 -l 来指定,并且将库文件的名字前面的 lib 和后面的 .so 删除,例如:libA.so 就要写成 -lAwmake 会自动加载以下的库

  1. $FOAM_LIBBIN/libOpenFOAM.so
  2. $WM_DIR/rules/$WM_ARCH 指定的平台依赖的库
  3. Make/options 指定的库

Make/options 文件指定库的文件夹和库,使用以下格式

EXE_LIBS = \
    -L<库文件夹1> \
    -L<库文件夹2> \
    -l<库文件1>   \
    -l<库文件2>

总的来说,就是库的文件夹用 -L,库文件用 -l

需编译的源文件

编译器需要一此 .C 文件来进行编译。.C 文件通常列于 Make/files 文件,它还包含了可执行文件的路径和名称,须用 EXE = 来指定。标准的方式建议使用 .C 文件的名称。OpenFOAM 提供了两种路径供大家选择:一种是发布的标准执行文件,位于 $FOAM_APPBIN;一种是供用户使用的,位于 $FOAM_USER_APPBIN$

Make/files 文件的格式为

aFoam.C                 // .C 文件

EXE = $(FOAM_USER_APPBIN)/aFoam // 可执行文件的路径和文件名

如果需要编译形成库文件,则使用

bFoam.C                 // .C 文件

LIB = $(FOAM_USER_LIBBIN)/libbFoam // 库文件的路径和文件名

形成的库文件为 libbFoam.so,编译库文件,则需要使用命令

wmake libso
1 Like