[4A/OP]
2.2 安装程序
2.2.1 解压缩.tar.gz文件
调用UNIX命令tar会在当前目录下创建4A/OP子例程主目录4AOP-1.5/,包括所有必要的子目录。只需键入以下命令即可解压缩和“untar”4AOP-1.5.tar.gz:
tar -xzvf 4AOP-1.5.tar.gz
4AOP-1.5/目录现在应该已经创建,并且应该包含以下文件和子目录:README、VERSION以及目录DDC、model/、gui/和test。
2.2.2.生成文件
如上一章所述,支持以下编译器:
- C编译器
- GNU gcc(4.4.7或4.9.3)
- Intel icc
- Fortran编译器
- GNU gfortran(4.4.7或4.9.3)
- Intel ifort(12.1.3)
根据您要用于构建4A/OP的编译器,您需要将正确的编译参数设置到编译过程中使用的生成文件中。
srclib子目录中提供了一些生成文件的示例(生成文件.4a{IDCOMPIL}.inc文件,其中{IDCOMPIL}是编译的配置标识符)。
下面是一个使用gcc和gfortran的简单makefile示例:
# Makefile.4a
# GNU
CC = gcc
FC = gfortran
SHELL = /bin/ksh
RANLIB = ranlib
AR = ar
INCLUDES = -I $(RDIR_S_MOD) -J $(RDIR_S_MOD)
CFLAGS
= -DSWAPIO -O3 -mieee-fp -ffloat-store -march=native
FFLAGS
= -O3 -fconvert=big-endian -mcmodel=large -cpp -ffloat-store -mieee-fp -march=native
LDFLAGS = -O3 -fconvert=big-endian -mcmodel=large -cpp -ffloat-store -mieee-fp -march=native -Wl -lnetcdf -lnetcdff
gcc版本9.4.0
gfortran版本9.4.0
直接使用Makefile.4a.gfortran.inc
LDFLAGS += -L/opt/netcdf/lib -lnetcdf -lnetcdff
2.2.3. 安装
2.2.3.1. 编译程序
对于编译,有必要准备编译配置,这取决于将使用的编译器。在目录模型的子目录srclib中,在文件Makefile.4a{IDCOMPIL}.inc中有一些配置定义的示例,其中{IDCOMPIL}是编译的配置标识符。用户必须编辑这样的配置文件,使配置适应其自己的计算环境,并保存此配置。要提供的信息是fortran和C编译器路径及其选项(CC、FC、CFLAGS、FFLAGS和LDFLAGS)。
编译的工作目录是srclib/。
因此,编译命令如下:
make all IDCOMPIL={your own parameters}
编译生成库、目标文件和可执行文件。这些编译输出放置在library/lib$IDCOMPIL目录以及子目录libexe(可执行文件)、libobj(对象)、libmod(模块)和lib(库)中。子目录库/lib$IDCOMPIL/libexe/应包含可执行文件mainaaaa、atmformat、aerformat、lirespc4a、calcStat、calcStaJ、ifctgauss、spjac和statanalyst。
编译还创建了用于存储4A模拟和ISRF准备结果的目录:outputbin$IDCOMPIL、outputascii$IDCOMPIL和ISRF$IDCOMPIL。
示例:用户可以使用发行版附带的配置文件进行编译:IDCOMPIL=.gfortran,如下所示:
make all IDCOMPIL=.gfortran
出现错误:-bash: make: command not found
原因分析:一般出现这个-bash: make: command not found提示,是因为安装系统的时候使用的是最小化mini安装,系统没有安装make、vim等常用命令,直接sudo apt-get install安装下即可。
解决方法:
sudo apt-get install ksh
sudo apt-get update
sudo apt-get install gcc automake autoconf libtool make
在 Linux 系统中,sudo install
的行为取决于你指定的目标路径(DESTDIR
或安装目录)。它不会自动安装到所有目录,而是按照你给定的参数进行安装。
1. sudo install
的典型用法
sudo install -m 755 source_file /usr/local/bin/target_file
- 这个命令会将
source_file
安装到/usr/local/bin/target_file
,并设置权限为755
(可执行)。 - 它只影响指定的目标路径,不会影响其他目录。
2. make install
通常如何工作?
如果你运行的是 sudo make install
,它的行为取决于 Makefile
里的 install
规则。例如:
install:install -m 755 my_program /usr/local/bin/
- 这个
install
目标会将my_program
复制到/usr/local/bin/
,不会影响其他目录。
3. DESTDIR
变量(用于 staged installs)
有些 Makefile
支持 DESTDIR
,允许临时安装到某个目录(如打包时使用):
sudo make install DESTDIR=/tmp/pkg
- 这样文件会安装到
/tmp/pkg/usr/local/bin/
而不是直接安装到/usr/local/bin/
。 - 仍然不会影响所有目录,只是更改了安装前缀。
4. sudo make install
会安装到哪里?
- 默认情况下,
make install
通常安装到:/usr/local/bin/
(可执行文件)/usr/local/lib/
(库文件)/usr/local/include/
(头文件)/usr/local/share/
(数据文件)
- 不会自动安装到所有目录,而是按照
Makefile
或configure
脚本的配置进行安装。
5. 如何查看 make install
会安装哪些文件?
- 可以运行
make -n install
(模拟执行但不真正安装),查看它会复制哪些文件到哪些路径:make -n install
- 或者检查
Makefile
里的install
规则。
总结
sudo install
或sudo make install
不会安装到所有目录,而是按照给定的目标路径或Makefile
规则安装。- 如果你担心它会污染系统,可以:
- 使用
DESTDIR
测试安装位置。 - 用
make -n install
查看它会修改哪些文件。 - 考虑使用
stow
或checkinstall
进行更可控的安装。
- 使用
如果你遇到某个软件安装到了意外的地方,可能是它的 Makefile
配置问题,可以检查它的安装规则。