我有一个包含多个c源文件的目录(每个文件本身都是一个小程序),我想一次编译所有文件,并在子目录bin /中输出每个文件的二进制文件。二进制文件的名称应该是c源文件之一,但没有.c扩展名。 我怎样才能在Makefile中完成类似的东西?
示例:
-src
ll.c
lo.c
-bin
ll
lo
我想出的第一件事是:
CFLAGS=-Wall -g
SRC=$(wildcard *.c)
all: $(SRC)
gcc $(CFLAGS) $(SRC) -o bin/$(SRC)
但这并不是我认为的那样。
答案 0 :(得分:2)
第all: $(SRC)
行告诉make all
目标每个源文件作为先决条件。
该目标的配方(gcc $(CFLAGS) $(SRC) -o bin/$(SRC)
)然后尝试在所有源文件上运行gcc,并告诉它创建bin/<first word in
$(SRC){作为输出{ {1}} $(SRC)`是gcc的其他额外参数。
你想要更像这样的东西:
with the rest of the words from
答案 1 :(得分:0)
[我忽略了你说你想在Makefile中做到这一点的地方。我的解决方案是直壳。]
我会使用像
这样的东西CFLAGS=-Wall -g
for cfile in *.c
do
cc $CFLAGS -o bin/`basename $cfile .c` $cfile
done
答案 2 :(得分:0)
Make足够智能,可以使用隐式规则。确保没有makefile存在并运行:
for f in *.c; do make CFLAGS='-Wall -g' ${f%.c} && mv ${f%.c} bin; done