编写makefile来编译几个二进制文件

时间:2014-11-27 08:16:24

标签: build makefile build-process gnu-make

我正在尝试编写一个Makefile来编译具有以下名称的87个文件:     file1.c,file2.c file3.c .... file87.c

我正在尝试将它们编译成具有名称的单独二进制文件:     file1,file2,file3 .... file87

在Makefile中,我需要为每个变量定义以下变量。 这就是我原来的

FILE1 = file1
$(FILE1)_SRC := \
        mydir/file1.c \
        mydir/another.c

$(FILE1)_CFLAGS := `pkg-config --cflags glib-2.0`
$(FILE1)_LDFLAGS := -L. `pkg-config --libs glib-2.0`

FILE2 = file2
$(FILE2)_SRC := \
        mydir/file2.c \
        mydir/another.c

$(FILE2)_CFLAGS := `pkg-config --cflags glib-2.0`
$(FILE2)_LDFLAGS := -L. `pkg-config --libs glib-2.0`

同样在Makefile的末尾,我需要存储二进制文件的名称

binaries = $(FILE1) $(FILE2) ...... $(FILE87)

我在make中探索了循环并定义了指令但我无法理解如何以非繁琐的方式整齐地完成这项工作。请注意CFLAGS和LDFLAGS对所有这些都是相同的。

非常欢迎编写Makefile的任何输入或替代方法。

我根据下面的seldon的回答写了这个,但这给出了错误

SRCS = $(wildcard mydir/*.c)
TGTS = $(SRCS:%.c=%)

CFLAGS  = $$(pkg-config --cflags glib-2.0)
LDFLAGS = -L.
LDLIBS  = $$(pkg-config --libs glib-2.0)

all: $(TGTS)
    @echo $(SRCS)
    @echo $(TGTS)

$(TGTS) : % : %.o another.o

#clean:
 #   rm -f $(TGTS) *.o

#.PHONY: all clean

$ make
cc $(pkg-config --cflags glib-2.0)   -c -o mydir/another.o mydir/another.c
make: *** No rule to make target `another.o', needed by `mydir/another'.  Stop.

来源:

another.c

# include <stdio.h>
# include <stdlib.h>

void print_string(const char * file_name, int lineno, const char * func_name) {

    printf("%s %d %s\n", file_name, lineno, func_name);

}

file01.c

int main() {

    print_string(__FILE__, __LINE__, __func__);
}

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:3)

如果所有程序的变量都相同,则可以使用如下静态模式规则:

SRCS = $(wildcard file*.c)
TGTS = $(SRCS:%.c=%)

CFLAGS  = $$(pkg-config --cflags glib-2.0)
LDFLAGS = -L.
LDLIBS  = $$(pkg-config --libs glib-2.0)

all: $(TGTS)

$(TGTS) : % : %.o another.o

clean:
    rm -f $(TGTS) *.o

.PHONY: all clean