我正在尝试理解和修改包含以下代码的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
特定的。因此,我的方法是用更明确的输入(如第二个代码片段)替换上面第二行(在第一个代码片段中)形式编写的所有代码。
这里的任何指导都将非常有帮助。
谢谢
答案 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