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

时间:2018-07-09 16:58:21

标签: makefile gnu-make

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

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

我了解第一行,即分配给变量。我假设第二行与

相同
OBJECTS = cvode.o RcppExports.o

,即,文件名与$(SOURCES)中的文件名相同,但扩展名为.o。正确吗?

我在线阅读了GNU make文档,但是找不到这种代码编写的帮助。这是宏吗?

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

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

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

这里的任何指导都将非常有帮助。

谢谢

1 个答案:

答案 0 :(得分:1)

我不太确定您的问题是什么,但是如果您正在寻找有关此问题的文档,称为substitution reference

您的makefile有一些问题:

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

第二,语法($SHLIB)是错误的;我假设您在两行中都确实是$(SHLIB)

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