C makefile替换未按预期工作
我有以下生成文件:C makefile替换未按预期工作,c,makefile,substitution,C,Makefile,Substitution,我有以下生成文件: 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_文件\u CLNT都是.O文件。但可悲的是,结果是: add_clnt.c, add_client.c, initfunction.c, add_xdr.o 因此,只有最后一个文件是.o
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_文件\u CLNT
都是.O文件。但可悲的是,结果是:
add_clnt.c, add_client.c, initfunction.c, add_xdr.o
因此,只有最后一个文件是.o文件。我直接从一个示例makefile中获取了这个示例。
有人能解释一下,为什么所有的O\u文件\u CLNT
都不是.O文件
Gruß,Andre单词分隔符不是逗号
,
,而是空格
。因此,将第一个变量更改为:
C_FILES_CLNT = add_clnt.c add_client.c initfunction.c add_xdr.c
应该可以使用。单词分隔符不是逗号
,
,而是空格
。因此,将第一个变量更改为:
C_FILES_CLNT = add_clnt.c add_client.c initfunction.c add_xdr.c
应该可以使用。单词分隔符不是逗号
,
,而是空格
。因此,将第一个变量更改为:
C_FILES_CLNT = add_clnt.c add_client.c initfunction.c add_xdr.c
应该可以使用。单词分隔符不是逗号
,
,而是空格
。因此,将第一个变量更改为:
C_FILES_CLNT = add_clnt.c add_client.c initfunction.c add_xdr.c
应该能让它起作用。补充上述答案
因此只有最后一个文件是.o文件
这是因为只有最后一个文件名具有扩展名.c
其余文件被视为.c,
扩展名,这就是规则%不采用这些文件的原因。c=%.o
您可以尝试一下makefile是如何工作的,例如将O_文件\u CLNT=$(C_文件\u CLNT:%.C=%.O)
更改为O_文件\u CLNT=$(C_文件\u CLNT:%.C,=%.O)
(观察%C,
中的,
)然后所有文件名都将转换为.O
,最后一个除外:p
结论:Makefile将空格视为分词符,而不是逗号。同样的规则也适用于编译器,在编译器中,我们给出由空格操作的标志。添加到上述答案中
因此只有最后一个文件是.o文件
这是因为只有最后一个文件名具有扩展名.c
其余文件被视为.c,
扩展名,这就是规则%不采用这些文件的原因。c=%.o
您可以尝试一下makefile是如何工作的,例如将O_文件\u CLNT=$(C_文件\u CLNT:%.C=%.O)
更改为O_文件\u CLNT=$(C_文件\u CLNT:%.C,=%.O)
(观察%C,
中的,
)然后所有文件名都将转换为.O
,最后一个除外:p
结论:Makefile将空格视为分词符,而不是逗号。同样的规则也适用于编译器,在编译器中,我们给出由空格操作的标志。添加到上述答案中
因此只有最后一个文件是.o文件
这是因为只有最后一个文件名具有扩展名.c
其余文件被视为.c,
扩展名,这就是规则%不采用这些文件的原因。c=%.o
您可以尝试一下makefile是如何工作的,例如将O_文件\u CLNT=$(C_文件\u CLNT:%.C=%.O)
更改为O_文件\u CLNT=$(C_文件\u CLNT:%.C,=%.O)
(观察%C,
中的,
)然后所有文件名都将转换为.O
,最后一个除外:p
结论:Makefile将空格视为分词符,而不是逗号。同样的规则也适用于编译器,在编译器中,我们给出由空格操作的标志。添加到上述答案中
因此只有最后一个文件是.o文件
这是因为只有最后一个文件名具有扩展名.c
其余文件被视为.c,
扩展名,这就是规则%不采用这些文件的原因。c=%.o
您可以尝试一下makefile是如何工作的,例如将O_文件\u CLNT=$(C_文件\u CLNT:%.C=%.O)
更改为O_文件\u CLNT=$(C_文件\u CLNT:%.C,=%.O)
(观察%C,
中的,
)然后所有文件名都将转换为.O
,最后一个除外:p
结论:Makefile将空格视为分词符,而不是逗号。同样的规则也适用于编译器,在编译器中,我们使用空格指定标志。Np,请确保接受答案:)我编辑它以指定单词分隔符。Np,请确保接受答案:)我编辑它以指定单词分隔符。Np,请确保接受答案:)我编辑它以指定单词分隔符。Np,请确保接受答案:)我已将其编辑为指定单词分隔符。