如何编译目录中的所有.c文件并输出没有.c扩展名的每个二进制文件

时间:2015-07-02 18:19:32

标签: c makefile

我有一个包含多个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)

但这并不是我认为的那样。

3 个答案:

答案 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