关于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
我正在尝试理解和修改包含以下代码的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