转载自: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. wstngfw中配置freeradius

    wstngfw中配置freeradius Radius为各种网络设备和服务提供了一个认证来源. Radius认证常用于***.入网门户.交换机.路由器和防火墙.Radius认证比在网络上的不同设备跟踪 ...

  2. H5新增input标签

    1.电子邮件 <input type="email" name="email"/> 默认正则:输入内容必须有@符号,@后面必须有内容 2.搜索框 & ...

  3. fastjson反序列化漏洞研究(上)

    前言 最近护网期间,又听说fastjson传出“0day”,但网上并没有预警,在github上fastjson库中也有人提问关于fastjson反序列化漏洞的详情.也有人说是可能出现了新的绕过方式.不 ...

  4. Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试

    Jerry的Restful ABAP Programming模型介绍系列的前两篇文章: 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用 Jerry带 ...

  5. DbTemplate

    package com.me.dbComponent; import java.sql.Connection; import java.sql.PreparedStatement; import ja ...

  6. 【Distributed】分布式解决方案【汇总】

    一.问题引出 二.分布式Session问题 三.网站跨域问题 四.分布式任务调度平台 五.分布式配置中心 六.分布式锁解决方案 七.缓存技术 一.问题引出 [Distributed]分布式系统中遇到的 ...

  7. c# 处理串行化对象的版本变化

  8. Linux命令——yum

    翻译自:20 Linux YUM (Yellowdog Updater, Modified) Commands for Package Management 前言 本篇文章将介绍如何使用RedHat开 ...

  9. python自定义ORM并操作数据库

    看这个代码之前先去看上篇文章,理解type的用法及元类的含义: ORM可以代替pymysql,实现将python语义装换为sql语句,简单化 import pymysql ''' metaclass, ...

  10. 关于日期格式yyyy-MM-dd和YYYY-MM-dd

    原文:https://blog.csdn.net/guotufu/article/details/85696296 开发的时候用到这个类进行日期的转换,想转换的日期格式为“YYYY/MM/dd”,结果 ...