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

时间:2011-06-24 20:42:51

标签: makefile design-patterns

我有以下makefile:

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中编译。

如何使用模式来缩短它?

e.g。在这个方向:

    progs= prog1 prog2 prog3

    all: ($progs)

%.exe: %.c

      gcc .....

3 个答案:

答案 0 :(得分:3)

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

progs := prog1 prog2 prog3
all: $(progs)

如果需要指定要使用的C编译器,只需添加一行读取

CC := gcc

如果需要传递编译器附加标志,请将它们放在CFLAGS变量中。

编辑:要满足对名为foo.exe的文件的需求,您可以在构建后移动它:

%.exe: %
            mv $< $@

或者,如果您知道您正在使用GNU工具链,您可以告诉链接器为您提供该前缀:

LDFLAGS := --force-exe-suffix

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

答案 1 :(得分:1)

这样的事情应该有效:

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

答案 2 :(得分:0)

非常感谢您的帖子!我发现我必须添加一条规则才能使其正常工作。另外我添加了touch来重复makefile。

progs = prog1 prog2 prog3

all: run_touch $(progs)

run_touch:

    touch *.cpp

%:%.cpp

    $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS)