makefile 替换没有像预期的那样工作
makefile substitution not working like expected
我有以下生成文件:
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 文件。我直接从 example-makefile 中提取了这个例子。
有人可以解释一下,为什么所有 O_FILE_CLNT
都不是 .o-Files 吗?
格鲁斯,安德烈
单词分隔符不是逗号,
而是白色space</code>。所以将第一个变量更改为:</p>
<pre><code>C_FILES_CLNT = add_clnt.c add_client.c initfunction.c add_xdr.c
应该可以正常工作。
添加到上面的答案
so only the last file is a .o-File
这是因为只有最后一个文件名的扩展名为 .c
,其余文件被视为 .c,
扩展名,这就是为什么它们不被规则采用 %.c=%.o
[=19] =]
您可以尝试看看 makefile 是如何工作的,例如将 O_FILES_CLNT = $(C_FILES_CLNT:%.c=%.o)
更改为 O_FILES_CLNT = $(C_FILES_CLNT:%.c,=%.o)
(观察 %c,
中的 ,
)然后所有文件名将转换为 .o
除了最后一个 :P
结论:Makefile 将 space 视为单词分隔符而不是逗号。同样的规则也适用于我们给出由 spaces.
分隔的标志的编译器
我有以下生成文件:
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 文件。我直接从 example-makefile 中提取了这个例子。
有人可以解释一下,为什么所有 O_FILE_CLNT
都不是 .o-Files 吗?
格鲁斯,安德烈
单词分隔符不是逗号,
而是白色space</code>。所以将第一个变量更改为:</p>
<pre><code>C_FILES_CLNT = add_clnt.c add_client.c initfunction.c add_xdr.c
应该可以正常工作。
添加到上面的答案
so only the last file is a .o-File
这是因为只有最后一个文件名的扩展名为 .c
,其余文件被视为 .c,
扩展名,这就是为什么它们不被规则采用 %.c=%.o
[=19] =]
您可以尝试看看 makefile 是如何工作的,例如将 O_FILES_CLNT = $(C_FILES_CLNT:%.c=%.o)
更改为 O_FILES_CLNT = $(C_FILES_CLNT:%.c,=%.o)
(观察 %c,
中的 ,
)然后所有文件名将转换为 .o
除了最后一个 :P
结论:Makefile 将 space 视为单词分隔符而不是逗号。同样的规则也适用于我们给出由 spaces.
分隔的标志的编译器