我有以下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 .....
答案 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)