转载自:http://openfoam.blog.sohu.com/22041538.html

OpenFOAM自己提供的标准类都是以库的形式提供的,并且利用头文件给出了库的应用接口。这样一来,用户的代码中即使用到了某个类,也不需要对源文件进行重新编译了。这样做有好有坏:好处是提高了效率;坏处是源文件(.c)进行修改了但如果不重新编译的话会导致库文件不会被更新,从而用户代码中用到的还是旧库。缺点可以弥补,那就是在修改了代码之后进行重新编译,但是一般情况下,我们完全可以不去动OpenFOAM的源文件。(前面提到了编译器会根据文件的修改情况决定是否重新编译,针对的是.h文件,而非.c源文件)

既然OpenFOAM采用的是上面的这种机制,那么用户在自己定义某个类之后该如何处理呢?标准的做法也是将其生成库文件,就像OpenFOAM本身提供的那样。当然用户很可能会修改自己的这个类,那么在修改之后记得重新编译就好了。那么,如何生成用户自定义的库呢?

OpenFOAM提供了一个库:foamUser。如果查看目录$FOAM_LIBBIN会发现该库文件。不过OpenFOAM本身并未给此库提供什么功能,它相当于一个"空库",等待用户自己去添加。与之对应,在$FOAM_SRC目录下可以找到一个foamUser文件夹,这是一个模版,提供了一个现成的框架,其中Make文件夹中的files和options文件提供了利用wmake进行编译时的选项。其中files文件内容如下:

编译为库的命令为 wmake libso 。而libfoamUser.C中用到的头文件或者库同样在Make/options文件中说明,方式与编译可执行文件相同,不过关键字EXE要换成LIB,亦即:

LIB_INC =
\

-I<directoryPath>
\

...
\

LIB_LIBS =
\

-L<libraryPath>
\

...
\

-l<library>
\

...
\

可见,$FOAM_LIBBIN中的库文件就是由$FOAM_SRC/foamUser下的内容生成的(或者添加,因为每个源文件都可以添加到某一个已经存在的库中,如果该库不存在,则生成。当然也可以同时将很多源文件添加到某库中,这时Make/files文件中源文件的数量就不止一个,从这也可以看出,wmake在进行编译的时候判断依据实际上就是Make文件夹)

仿照上面的"标准"方式,我们可以开发自己的库了。针对不同的开发功能,我们将foamUser这个名字替换成我们自己所需要的(名字取得直观一些,采用"驼峰"式)。这样做的好处就是方便代码管理,有条理的工作总能提高效率。建议:

自定义库的源文件统一放在$FOAM_USER/src目录下,以功能分类存储(对应文件夹)

自定义库生成至$FOAM_USER_LIBBIN/

库的名称与相应文件夹同名

总结一下,用户自定义库需要进行以下工作:

1.编写源文件(一个或多个,多个情况建议分文件夹存储)

2.确定wmake范围,建立Make文件夹及options和files文件(Make文件夹应位于工程目录下,最好该目录下所有源文件应都在编译范围内)

3. 修改options文件,确定头文件搜索路径,所引用库文件(搜索路径&库)

4. 修改files文件,确定编译范围和输出位置、输出库文件名

5. wmake
libso

将自己的源码编译为库,同时做好其应用接口——头文件,我们就可以轻松应用自己的库了,就像OpenFOAM自己提供的一样。一个好的习惯是,在编好一个源文件之后,就给出相应的头文件,并且命名相同,OpenFOAM本身就是这样做的。

在OpenFOAM中做用户自定义库——编译library【转载】的更多相关文章

  1. Python圈中的符号计算库-Sympy(转载)

    <本文来自公众号“大邓带你玩python”,转载> import math math.sqrt(8) 2.8284271247461903 我们看看Python中结果 math.sqrt( ...

  2. OpenFOAM中的基本变量快速认知【转载】

    转载自:http://blog.sina.com.cn/s/blog_a0b4201d0102vsf9.html label 实际上就是整型数据的变体,int,OF对它进行了包装,以适应32或64位系 ...

  3. 动态库与静态库的学习 博主写的很好 静态库 编译的时候 需要加上 static 动态库编译ok运行不成功就按照文章中的方法修改

    来源连接   http://www.cnblogs.com/skynet/p/3372855.html C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库 ...

  4. 68.vivado与modelsim的关联以及器件库编译

    vivado软件中也自带仿真工具,但用了几天之后感觉仿真速度有点慢,至少比modelsim慢挺多的.而modelsim是我比较熟悉的一款仿真软件,固然选它作为设计功能的验证.为了将vivado和mod ...

  5. 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持

    在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreS ...

  6. codec engine工程中使用ccs下编译的lib库

    原文地址:codec engine工程中使用ccs下编译的lib库--转作者:木子小白 这两天将dsp的算法程序放到ccs下,生成lib库文件 这样的好处就是: 1. 算法封装成lib库以后,看不到源 ...

  7. 详细地jsoncpp编译方法 和 vs2010中导入第三方库的方法

    详细地jsoncpp编译方法 和 vs2010中导入第三方库的方法 一 编译链接 1 在相应官网下载jsoncpp 2 解压得到jsoncpp-src-0.5.0文件 3 打开jsoncpp-src- ...

  8. json库的编译方法和vs2010中导入第三方库的方法

    json库的编译方法和vs2010中导入第三方库的方法 一.去相应官网下载json.cpp文件 Jsoncpp下载:https://sourceforge.net/projects/jsoncpp/  ...

  9. Qt5.7中使用MySQL Driver(需要把libmysql.dll文件拷贝到Qt的bin目录中。或者自己编译的时候,链接静态库)

    Qt5.7中使用MySQL Driver 1.使用环境 Qt5.7的安装安装就已经带了MySQL Driver,只需要在安装的时候选择一下即可.如果没有安装,可以采取自己编译的方式.在Qt的源码包的q ...

随机推荐

  1. maven - 多模块构建

    使用idea创建maven项目 点击next输入GroupId和ArtifactId 点击next创建项目,新建项目结构如下 修改demo打包方式为pom 按层级拆分创建模块model,server, ...

  2. 基于【 MySql 】二 || mysql详细学习笔记

    mysql重点学习笔记 /* Windows服务 */ -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysql ...

  3. ol li 兼容

    ol 标签在 chrome 60 和 safari12 缩进不一样. 因为序号距离copy距离不一样,导致显示不一样.解决办法. list-style-position: inside;text-in ...

  4. vue 使用vue-video-player播放hls格式视频

    安装 vue-video-player   在 “ devDependencies ” 中 安装  videojs-contrib-hls 在“ dependencies ”中   main.js 中 ...

  5. C#基础 - 定义变量,输入输出

    本节课主要讲解C#的发展历史及部分C#语言基础, 主要内容有:控制台程序的创建,输出,输入,定义变量,变量赋值,值覆盖,值拼接,值       打印,两种数据类型,整形类型转换 本节重点难点:定义变量 ...

  6. JetBrains 系列开发工具 汉化(中文化)教程

    项目地址:(* ̄3 ̄)╭ 操作流程: 拷贝内容 将下载的包改名为resources_cn.jar,拷贝到 $IDEA_HOME$/lib/ 目录下 重启IDEA 打开或者重新启动IDEA

  7. javascript_14-对象

    什么是对象 生活中的对象,一个车.一个手机 对象具有特性和行为 面向对象和基于对象 面向对象:可以创建自定义的类型.很好的支持继承和多态.面向对象的语言有 c++ .Java. C# ... 面向对象 ...

  8. Wechat alert

    企业微信号登录--注册企业号或者企业微信 添加子部门 部门添加成员 创建应用 需要接收告警的人员关注企业号 企业号已经被部门成员关注 企业号有一个可以发送消息的应用,一个授权管理员,可以使用应用给成员 ...

  9. 2019-ACM-ICPC-沈阳区网络赛-K. Guanguan's Happy water-高斯消元+矩阵快速幂

    2019-ACM-ICPC-沈阳区网络赛-K. Guanguan's Happy water-高斯消元+矩阵快速幂 [Problem Description] 已知前\(2k\)个\(f(i)\),且 ...

  10. MyBatis3_[tp_38~]_动态sql_if_判断&OGNL_where标签_

    笔记要点出错分析与总结 /** 笔记: * 查询的时候,如果某些条件,没带可能SQL拼装会有问题; * 1.-->给where 后面加上 1=1, 以后的条件都and XXX * 2. < ...