嘿所以我对makefile有点新意,我正在尝试制作一个通用的makefile,它将编译当前目录中以.c结尾的任何文件,而不是为项目专门命名的文件。我搜索了几个地方,重新阅读了我的讲义,尝试了一些改动,我似乎无法让它工作。这就是我所拥有的:
CFLAGS= -Wall -g -o
%.o : %.c
gcc ${CFLAGS} .c $<
这是我尝试运行时遇到的错误:
make: *** No targets. Stop.
我真的很感激任何帮助,我真的很鄙视一遍又一遍地输入gcc
!
该文件名为Makefile
答案 0 :(得分:3)
一个通用的makefile,它将编译以当前目录中的.c结尾的任何文件
这是make
的非典型用法,但可以使用GNU make的文本函数来完成:
SOURCES = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SOURCES))
all: $(OBJS)
如果您的目录中有foo.c
和bar.c
,则运行make
将生成foo.o
和bar.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