gmake编译目录中的所有文件

Mar*_*ood 13 makefile gnu-make

我们需要一些C++代码来创建一个make文件.每个.h和.C对创建一个对象,然后一些对象链接在一起形成一个可执行文件.很标准的东西.

这个非gnu make命令只是将所有文件构建到目录中的对象中

%.o:%.C
    $(CC) $(CPFLAGS)  -c  $<
Run Code Online (Sandbox Code Playgroud)

这样做是为每个%.C文件(即每个.C文件)构建一个相应的.o文件.

有人知道如何使用gmake吗?

干杯

标记

Eri*_*ski 22

您所显示的语法在GNU make parlance中称为模式规则,它构成了解决方案的基石.您所需要的只是添加一种动态获取.C文件列表的方法.其他人已经展示了用于$(shell)实现此目的的解决方案,但这是不必要的低效率.我建议你使用$(通配符),这是一个GNU make内置函数,专为此目的而设计:

SRCS = $(wildcard *.C)
OBJS = $(patsubst %.C,%.o,$(SRCS))
foo: $(OBJS)
        $(CC) -o $@ $^

%.o: %.C
        $(CC) $(CPFLAGS)  -c  $<
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找更简洁的内容,以下内容也适用:

foo: $(patsubst %.C,%.o,$(wildcard *.C))
Run Code Online (Sandbox Code Playgroud)

这只是消除了变量,并利用了GNU make提供默认%.o: %.C模式规则的事实,以及将可执行文件从一组对象链接在一起的默认规则.就个人而言,我会使用更详细的版本,因为我发现它更容易阅读和维护,但每个人都有自己的版本.

希望有所帮助,

埃里克·梅尔斯基