在一个makefile中编译三个可执行文件

在一个makefile中编译三个可执行文件,makefile,design-patterns,Makefile,Design Patterns,我有以下生成文件: prog1: prog1.c gcc -o prog1.exe prog1.c prog2: prog2.c gcc -o prog2.exe prog2.c prog3: prog3.c gcc -o prog3.exe prog3.c 这是一个演示目录中的演示文件,我想在一个makefile中编译 progs = prog1 prog2 prog3 all: run_touch $(progs) run_touch

我有以下生成文件:

prog1: prog1.c

       gcc -o prog1.exe prog1.c

prog2: prog2.c

       gcc -o prog2.exe prog2.c

prog3: prog3.c

       gcc -o prog3.exe prog3.c
这是一个演示目录中的演示文件,我想在一个makefile中编译

progs = prog1 prog2 prog3

all: run_touch $(progs)

run_touch:

    touch *.cpp

%:%.cpp

    $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
我如何使用模式来缩短这个时间

e、 g.在这方面:

    progs= prog1 prog2 prog3

    all: ($progs)

%.exe: %.c

      gcc .....

像这样的方法应该会奏效:

%.exe: %.c
    gcc $< -o $@
%.exe:%.c
gcc$<-o$@

类似的方法应该可以:

%.exe: %.c
    gcc $< -o $@
%.exe:%.c
gcc$<-o$@

Make知道如何从源文件构建可执行文件。您应该能够将整个makefile编写为

progs := prog1 prog2 prog3
all: $(progs)
如果需要指定要使用的C编译器,只需添加一行代码即可

CC := gcc
如果需要向编译器传递附加标志,请将它们放入
CFLAGS
变量中

编辑:要满足对名为
foo.exe
的文件的需求,您可以在生成文件后将其移动:

%.exe: %
            mv $< $@

不幸的是,GNU Make似乎没有为“内置可执行文件的后缀/扩展名”提供标准变量。

Make知道如何从源文件构建可执行文件。您应该能够将整个makefile编写为

progs := prog1 prog2 prog3
all: $(progs)
如果需要指定要使用的C编译器,只需添加一行代码即可

CC := gcc
如果需要向编译器传递附加标志,请将它们放入
CFLAGS
变量中

编辑:要满足对名为
foo.exe
的文件的需求,您可以在生成文件后将其移动:

%.exe: %
            mv $< $@

不幸的是,GNU Make似乎没有为“内置可执行文件上的后缀/扩展”提供标准变量。

非常感谢您的帖子!我发现我必须添加一个规则才能使其生效。我还添加了touch,以便能够重复makefile

progs = prog1 prog2 prog3

all: run_touch $(progs)

run_touch:

    touch *.cpp

%:%.cpp

    $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
progs=prog1 prog2 prog3
全部:运行触摸$(程序)
运行触摸屏:
触摸*.cpp
%:%cpp
$(CC)$(CFLAGS)-o$@$<$(LDFLAGS)

非常感谢您的帖子!我发现我必须添加一个规则才能使其生效。我还添加了touch,以便能够重复makefile

progs = prog1 prog2 prog3

all: run_touch $(progs)

run_touch:

    touch *.cpp

%:%.cpp

    $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)
progs=prog1 prog2 prog3
全部:运行触摸$(程序)
运行触摸屏:
触摸*.cpp
%:%cpp
$(CC)$(CFLAGS)-o$@$<$(LDFLAGS)

Make知道如何做到这一点,它的内置规则可以理解额外的编译器和链接器参数,以及必要的库(如果指定)。@Novelocrat:当然可以,但OP特别询问如何使用模式来缩短他的解决方案。缩短的方法是使用Make的内置模式。Make知道如何做到这一点,它的内置规则可以理解额外的编译器和链接器参数,以及必要的库(如果指定)。@Novelocrat:当然可以,但OP特别询问如何使用模式来缩短他的解决方案。缩短的方法是使用Make的内置模式。+1,但请注意,Georg的makefile实际上生成了例如
prog1.exe
,而不是
prog1
。好的,因此读取%.exe:%mv$<$@的规则将是适当的响应,而无需查看Make文档。我打赌有一个内置变量可以设置为“可执行后缀”。+1,但请注意,Georg的makefile实际上生成了例如
prog1.exe
,而不是
prog1
。好的,因此读取规则%.exe:%mv$<$@将是适当的响应,而不查看Make文档。我打赌有一个内置变量可以设置为“可执行后缀”。