无法创建通用make文件

时间:2014-02-05 20:16:19

标签: c makefile

嘿所以我对makefile有点新意,我正在尝试制作一个通用的makefile,它将编译当前目录中以.c结尾的任何文件,而不是为项目专门命名的文件。我搜索了几个地方,重新阅读了我的讲义,尝试了一些改动,我似乎无法让它工作。这就是我所拥有的:

CFLAGS= -Wall -g -o
%.o : %.c
        gcc ${CFLAGS} .c $<

这是我尝试运行时遇到的错误:

make: *** No targets.  Stop.

我真的很感激任何帮助,我真的很鄙视一遍又一遍地输入gcc! 该文件名为Makefile

3 个答案:

答案 0 :(得分:3)

  
    

一个通用的makefile,它将编译以当前目录中的.c结尾的任何文件

  

这是make的非典型用法,但可以使用GNU make的文本函数来完成:

SOURCES = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SOURCES))
all: $(OBJS)

如果您的目录中有foo.cbar.c,则运行make将生成foo.obar.o

如果您希望命令make编译并将每个.c链接到可执行文件中,请尝试:

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

更典型的是,想要编译和链接单个程序。在这种情况下,您不需要任何makefile,只需运行以下命令:

make foo
make bar

答案 1 :(得分:1)

wildcard函数可用于编译目录中的所有C源文件,然后将它们链接在一起。

CFLAGS= -Wall -g -o
SRC=$(wildcard *.c)
foo: $(SRC)
    gcc -o $@ $^ $(CFLAGS)

答案 2 :(得分:0)

您有几个语法错误,并且您的makefile构建对象但不会将对象链接到可执行文件中。

myTest.c:

int main()
{
    return 0;
}
如果你的源文件是“myTest.c”,那么

makefile:

CFLAGS= -Wall -g

all: myTest

myTest: myTest.o
    gcc $(CFLAGS) $< -o $@

%.o : %.c
    gcc $(CFLAGS) -c $<

使用

构建
make myTest
gcc -Wall -g -c myTest.c
gcc -Wall -g myTest.o -o myTest