c-makefile替换无法正常工作



我有以下生成文件:

C_FILES_CLNT = add_clnt.c, add_client.c, initfunction.c, add_xdr.c
O_FILES_CLNT = $(C_FILES_CLNT:%.c=%.o)
all:
    echo $(O_FILES_CLNT)

我希望所有的O_FILE_CLNT都是.o文件。但遗憾的是,输出是:

add_clnt.c, add_client.c, initfunction.c, add_xdr.o

所以只有最后一个文件是.o-file。有人能解释一下,为什么所有的O_FILE_CLNT都不是.o文件吗?

Gruß,Andre

单词分隔符不是逗号,,而是空白。因此,将第一个变量更改为:

C_FILES_CLNT = add_clnt.c add_client.c initfunction.c add_xdr.c

应该让它发挥作用。

添加到上述答案

.c

因为只有最后一个文件名的扩展名为.c,,所以其余文件都被视为%.c=%.o扩展名,这就是为什么它们不被规则O_FILES_CLNT = $(C_FILES_CLNT:%.c=%.o) 接受的原因

您可以尝试一下makefile是如何工作的,例如将O_FILES_CLNT = $(C_FILES_CLNT:%.c,=%.o)更改为,(观察.o中的%c,),然后所有文件名都将转换为CCD_13,最后一个除外:p

结论:Makefile将空格视为单词分隔符,而不是逗号。同样的规则也适用于编译器,我们在编译器中提供由空格指定的标志。

最新更新