将所有源文件编译为可执行文件

时间:2014-02-23 06:31:18

标签: shell makefile

我知道makefile用于文件相关的项目。但我想以不同的方式使用它。

因为我总是写很多测试文件,所以每次编译它时都需要输入一堆标志,这太麻烦了。我只想编写一个makefile,将所有源文件编译成可执行文件及其相应的名称 - 如a.cab.cb等等,这样我就可以了只需输入make而不是整个gcc来获取可执行文件......

有没有简单的方法呢?

3 个答案:

答案 0 :(得分:1)

Make有一个内置的隐式规则,如下所示:

  % : %.c
         $(CC) -o $@ $(CFLAGS) $<

$(CFLAGS)将包含您的所有选项。

然后,做

make foo

会尝试从foo.c生成foo(如果它存在)。

为了能够一次编译所有这些,添加另一条规则:

all: $(patsubst %.c,%,$(wildcard *.c))

这个名为“all”的新规则将可执行文件列表作为先决条件。通配符函数列出目录中的所有.c文件,并且patsubst从每个文件中删除.c,留下将从每个.c文件生成的可执行文件列表。

这样做

make all

使它尝试将每个.c文件编译成相应的可执行文件。

答案 1 :(得分:0)

好吧明白了。我不太确定你是否理解语法。我会尽力解释。

你将创建一个名为Makefile的文件,没有扩展名。

DIR=$(HOME)/../"Your directory"

all: "Whatever driver you may have"

purify: purify g++ -o "Your file" -Wall -pedantic -g "objective file .o extension"

# Makes clean file
clean:
        rm -f *.o  "Drivers"

new:
    make clean
    make

答案 2 :(得分:0)

make内置了隐含规则。只需输入make amake bmake a b或您想要的任何内容即可。如果要添加任何特殊选项,请添加和导出名为CFLAGS的环境变量。