这是由于制表符与空格问题还是由于不受支持的机器导致的错误?

这是由于制表符与空格问题还是由于不受支持的机器导致的错误?

我正在尝试在 Ubuntu 16 上运行模拟代码。编辑是 16 而不是 14

当我运行 make all 时收到以下错误:

DIR bin exists
(cd src/gravity; make compile)
make[1]: Entering directory '/home/ubuntu/athena4.2/src/gravity'
../../Makeoptions:99: *** missing separator.  Stop.
make[1]: Leaving directory '/home/ubuntu/athena4.2/src/gravity'
Makefile:45: recipe for target 'compile' failed
make: *** [compile] Error 2

因此,我研究了许多 stack exchange。我发现,这种错误通常是由于使用制表符和空格之间存在某种问题而导致的。

事实上,当我查看 Makeoptions 的第 99 行时,我发现了空格:

 ...
 41 #-------------------  compiler/library definitions  ----------------------------
 42 # select using MACHINE=<name> in command line.  For example
 43 #    ophir> make all MACHINE=ophir
 44 # New machines can be added to ifeq blocks below.
 45
 ...
 83 ifeq ($(MACHINE),zenith)
 84   CC  = mpicc
 85   LDR = mpicc
 86   OPT = -O3
 87   MPIINC = -I/opt/mpich2/intel/include
 88   MPILIB = -L/opt/mpich2/intel/lib -lmpich
 89   FFTWLIB = -L/usr/local/fftw3 -lfftw3
 90   FFTWINC = -I/usr/local/fftw3
 91 else
 92 ifeq ($(MACHINE),macosx)
 93   CC = gcc
 94   LDR = gcc
 95   OPT = -O3
 96   FFTWLIB = -L/opt/local/lib -lfftw3
 97   FFTWINC = -I/opt/local/include
 98 else
 99   abort Unsupported MACHINE=$(MACHINE)
100 endif
...

现在,我尝试使用标签来代替,但得到了不同的错误:

DIR bin exists
(cd src/gravity; make compile)
make[1]: Entering directory '/home/ubuntu/athena4.2/src/gravity'
../../Makeoptions:99: *** recipe commences before first target.  Stop.
make[1]: Leaving directory '/home/ubuntu/athena4.2/src/gravity'
Makefile:45: recipe for target 'compile' failed
make: *** [compile] Error 2

然而,......我认为这可能不是真实的问题。

如果您从 Makeoptions 文件的专家那里注意到,有多个机器选项(我只显示了两个)。我想知道的是,也许我的机器不受支持?因为 Makeoptions 位于第 99 行?

因此,也许我应该为我的 ubuntu 机器添加一个 ifeq?

我可以在 Mac 上运行它。

谢谢你的帮助 :)

****************************** 更新 *******************************

感谢 heynnema 看起来很明显,现在我需要向 ifeq 块添加一台新机器。

我如何确定我应该使用的??名称??以便:

ifeq ($(MACHINE), ??名称??)

返回 true?

我已经尝试过 ??name?? = ubuntu

这会返回相同的错误,它给了我不受支持的机器。

元问题这是否会成为一个新问题?元问题

答案1

在终端:

grep -i 'ifeq ($(MACHINE)' Makeoptions

这将为您提供受支持的机器列表。如果您在此列表中看到您的机器类型,则在终端中:

make all MACHINE=the_name_of_a_supported_machine

如果您在列表中找不到您的机器类型,则表示您使用的机器不受支持。

相关内容