这个makefile看不懂,里面似乎有shell编程的东西

这个makefile看不懂,里面似乎有shell编程的东西

最前面这个prefix的定义是啥意思啊,没看明白,后面$里面的参数是预定义变量么?谢谢各位


prefix := $(shell rtai-config --prefix)

ifeq ($(prefix),)
$(error Please add <rtai-install>/bin to your PATH variable)
endif

CC = $(shell rtai-config --cc)
LXRT_CFLAGS = $(shell rtai-config --lxrt-cflags)
LXRT_LDFLAGS = $(shell rtai-config --lxrt-ldflags)

all: parlxrtmagma

parlxrtmagma: parlxrtmagma.c
$(CC) $(LXRT_CFLAGS) -o $@ $< $(LXRT_LDFLAGS)

clean:
rm -f *.o parlxrtmagma

.PHONY: clean
PRIFIX是前缀,编译出来的东西放在什么地方/USR或者/OPT等等了,要先试着编译就把它指向你自己的临时目录,别往系统里塞垃圾。如果没问题了再修改到/USR
请问这个应该去哪里看,我在makefile的规则中没有找到

按照我的理解,prefix := $(shell rtai-config --prefix)

应该定义了prefix变量,但$(variable)只有在引用变量的时候才使用$符号阿,所以那么里面那个variable应该是一个预定义变量才对,但shell rtai-config --prefix,我不知道是个什么东西,--prefix又代表啥?难道是注释?好像不太可能

ifeq ($(prefix),)
$(error Please add <rtai-install>/bin to your PATH variable)
endif

这句话的意思按道理分析应该是 如果没有定义了prefix,就怎样,但ifeq看字面意思应该是如果相等,不懂

后面倒没啥了,都是makefile的标准规则

谢谢大虾,希望继续指点
在shell中有个类似的:
variable=${var:=string}
这个的意思就是如果var非空,则variable=var
如果var为空,则variable=string,并且var=string
引用:
ifeq ($(prefix),)
$(error Please add <rtai-install>/bin to your PATH variable)
endif
我的理解是如果没有定义$(prefix),就显示下面的错误信息,根据这个错误信息应该是没有添加rtai-install/bin到你的PATH里面去,因此rtai有关的命令还不可以用!
makefile我还不太懂,不知道我说的是否正确?
这个怎么好像是tcsh的语法阿
shell rtai-config --prefix,应该指的是调用shell命令,那么--prefix是什么意思?

rtai-config是rtai-install/bin下面的一条命令,我看了一下,好像后面都和这个prefix没啥关系,是不是这一段包括后面那个ifeq就是为了判断有没有把这个路径添加到环境变量PATH中?
$(shell )和$(error)都是make中预定义的函数。
前者表示运行一个shell命令,后者表示出现一个错误。
本例中也就是说如果$(prefix)为空(也就是没有定义啦)则出现该函数中后面的那句话。
其他的都没什么问题吧。。。。