关于make文件语法理解的初学者问题

Beginner issue about make file syntax understanding

我正在尝试理解和修改包含以下代码的makefile

SOURCES= cvode.cpp RcppExports.cpp
OBJECTS= $(SOURCES:.cpp=.o)

我理解第一行,即赋值给一个变量。我假设第二行与

相同
OBJECTS = cvode.o RcppExports.o

即与 $(SOURCES) 中相同的文件名,但具有 .o 扩展名。对吗?

我在线阅读了 GNU make 文档,但无法找到此类代码公式的帮助。这是宏吗?

我问的原因是我需要在 Solaris 机器上编译 C 库,而 GNU make 可能不可用。当我收到以下错误时,我正在尝试使代码更具可移植性:

mksh: Fatal error in reader: = missing from replacement macro reference

这可能是 GNU make 具体的。所以我的方法是用更明确的输入(如第二个代码片段)替换上面第二行(在第一个代码片段中)形式编写的所有代码。

这里的任何指导都会很有帮助。

谢谢

我不太确定你的问题是什么,但如果你正在寻找关于它的文档,它被称为 substitution reference

您的 makefile 有一些问题:

首先,第一行的info函数只在GNU make中可用。你应该删除它。我非常有信心这条线是导致您出现问题的原因;由于 Solaris 版本的 make 无法识别 info 函数,因此它假定这是一个变量引用。然后它在内容 (...to be created is:...) 中看到 : 并认为这是一个替换引用。因为它后面没有 =,所以你会得到这个错误。

其次,语法($SHLIB)错误;我假设您在两行中的意思都是 $(SHLIB)

all: ($SHLIB)
($SHLIB): $(OBJECTS) ../inst/libsundials_all.a