安装CMAQ所需I/O API时setenv命令的使用疑问
安装CMAQ所需I/O API时setenv命令的使用疑问
别慌,刚接触Linux编译确实容易懵,我一步步给你理清楚:
首先,你搞混的两个setenv用法,不是二选一或者都要执行,而是后者是帮你自动生成一个基础的machinetype,然后你需要根据自己的编译器(这里是GCC)调整,再用前者的格式手动指定最终的machinetype。
先拆解一下那串自动生成的命令到底在干嘛:
uname -s:输出你的系统名称,比如Linux系统会返回Linuxuname -r | cut -d. -f1:提取内核版本的主号,比如你的内核是3.10.0,就会返回3- 把这俩结果拼起来,就会得到
Linux3,但文档里说了Linux2和Linux3是二进制兼容的,所以统一用Linux2就行
接下来关键的一步:去你解压后的ioapi文件夹里,看看所有Makeinclude.*开头的文件——这些就是不同系统+编译器的配置文件。你要用GCC,所以找带gcc的那个,比如大概率是Makeinclude.Linux2_x86_gcc(如果是64位系统可能是Linux2_x86_64_gcc,你自己核对一下文件名)。
现在你只需要执行这两步:
- 设置环境变量BIN为找到的那个machinetype(以Linux2_x86_gcc为例):
# 如果你用的是csh/tcsh shell,用这个 setenv BIN Linux2_x86_gcc # 如果你用的是bash/zsh(大多数新手默认是这个),用export代替setenv export BIN=Linux2_x86_gcc - 执行顶层的make命令创建目标目录:
make dirs
最后再帮你理清几个关键点:
- 不需要给每个I/O API版本都执行setenv,你只需要选自己要用的那个配置(也就是GCC对应的)就行
setenv BIN <machinetype>的作用是告诉编译系统:“我要用Makeinclude.<machinetype>这个配置文件来编译”- 文档里说的“appending any compiler specifics”就是指在自动生成的基础名称后面加编译器标识,比如
Linux2加上_x86_gcc,就变成了对应GCC的配置
备注:内容来源于stack exchange,提问作者Hector Viruega
相关产品推荐
相关产品推荐

