2012-07-07 91 views
2

我想了解makefile,主要是为了了解我正在使用的makefile,但是我正在通过可能是简单的东西引发。我的Makefile中混淆了我的部分是这样的:与Makefile的混淆

SUBS = dir1 dir2 dir3 

depend clean: 
     @-X=`pwd`;\ 
     for i in $(SUBS);\ 
     cd $$X/$$i;\ 
     done 

什么是“@ -X = pwd做我推测,它在某种程度上赋予本目录X的值,但我不知道怎么样?阅读“@ - ”语法

此外,为什么X &我需要前置'$$'而不是'$'?我已通过实验验证了两个$都是必需的,但会认为只需要一个人来替换他们的值

回答

3

我没有想法如何阅读“@ - ”语法。

只需从左到右阅读:-)开玩笑,在行开头的“@”表示在执行之前不要回显行; “ - ”告诉它忽略错误

X &我需要用'$$'而不是'$'作为前缀吗?

由于make本身具有通过$访问的变量,但在这种情况下,该规则使用shell变量,该变量也可以通过$访问。 $$只是一个转义,所以执行的shell命令包含$ X,而不是makefile变量X的内容,该变量可能为空。

+0

OK - 所以如果我理解正确,“X ='pwd'”会将当前工作目录的值赋给X并打印出来。 “@ X ='pwd'”做同样的事情,但是没有给我一个标准输出的评论。 “@ -X ='pwd'”有点多余,因为我没有看到'pwd'导致许多错误。但为什么“X”与“SUBS”不同,后者需要访问一个$? “SUBS”是保留字吗? – user1245262 2012-07-07 21:32:55

+0

坚持......我想我明白了。 SUBS只能通过make来读取,所以它只需要一个$,但是X正在被shell读取,所以它需要2 $,一个用于make和一个用于外壳..... – user1245262 2012-07-07 21:41:38

+0

打印isn不太正确,它不会打印pwd,它会打印传递给shell的整个命令行。关于变量:是的,shell中有“make”和变量。如果你看看这些行,你会发现它们都与\连接,所以它们实际上都在同一个shell中,因为它只是一个大的shell命令行。这就是为什么它也可以使用shell变量。 – 2012-07-07 21:45:01