代码之家  ›  专栏  ›  技术社区  ›  vehomzzz

生成文件别名[重复]

  •  -1
  • vehomzzz  · 技术社区  · 15 年前

    可能重复:
    makefile aliases

    请解释一下 $@ $^ 在下面的makefile中

    LIBS  = -lkernel32 -luser32 -lgdi32 -lopengl32
    CFLAGS = -Wall
    
    # (This should be the actual list of C files)
    SRC=$(wildcard '*.c')
    
    test: $(SRC)
        gcc -o $@ $^ $(CFLAGS) $(LIBS)
    
    3 回复  |  直到 9 年前
        1
  •  0
  •   Ziffusion    15 年前

    (以防万一其他一些伟大的解释没有完全到位)

    “make”程序允许您使用所谓的自动变量。对于执行操作的每个规则,它都会解析操作中指定的shell语句,并展开找到的任何这些自动变量。变量扩展到在该点执行的特定规则上下文中的值。

    test: $(SRC)
    

    在这个规则中,“test”是目标,无论$(SRC)扩展到什么,都是依赖项。现在,当“make”解析规则的action部分中指定的以下shell语句时,

    gcc -o $@ $^ $(CFLAGS) $(LIBS)
    

    之后 变量已展开。通过观察“make”的输出,可以看到执行的最终扩展版本。

        2
  •  4
  •   codaddict    15 年前

    这些是 special variables :

    $@ test .

    $^ 指所有先决条件的名称,中间有空格。在你的情况下,这是所有 .c

    SRC=$(wildcard '*.c') 利用 wildcard function .c.公司 SRC .

    foo.c bar.c . 您的makefile有效地扩展到:

    test: foo.c bar.c
          gcc -o test foo.c bar.c -Wall -lkernel32 -luser32 -lgdi32 -lopengl32
    
        3
  •  0
  •   Bill Lynch    15 年前

    SRC

    SRC=a.c b.c
    

    对于规则,它取决于所有源文件,目标是 test ,因此我们可以将规则扩展如下:

    gcc -o $@   $^     $(CFLAGS) $(LIBS
    gcc -o test $(SRC) $(CFLAGS) $(LIBS)
    

    然后通过替换 CFLAGS , LIBS SRC公司 用正确的展开式。

    有关此方面的一些文档,请查看以下内容: http://www.gnu.org/software/autoconf/manual/make/Automatic-Variables.html