我们有一些C ++代码,我们需要创建在一个make文件,每个h和.C对创建一个对象,然后某些对象被链接在一起以形成可执行文件。 漂亮的标准的东西。
这种非GNU make命令只是建立在一个目录下的所有文件到对象
%.o:%.C
$(CC) $(CPFLAGS) -c $<
这样做是为每个%.C文件(即每.C文件)建立相应的.o文件。
有谁知道如何用gmake命令做到这一点?
干杯
标记
我们有一些C ++代码,我们需要创建在一个make文件,每个h和.C对创建一个对象,然后某些对象被链接在一起以形成可执行文件。 漂亮的标准的东西。
这种非GNU make命令只是建立在一个目录下的所有文件到对象
%.o:%.C
$(CC) $(CPFLAGS) -c $<
这样做是为每个%.C文件(即每.C文件)建立相应的.o文件。
有谁知道如何用gmake命令做到这一点?
干杯
标记
还有你的语法称为GNU中的图案规则做出的说法,并形成解决方案的基石。 所有你需要的是添加一种方式来获得的.C文件列表动态。 其他人已经表明使用的解决方案$(shell)
要做到这一点,但这是不必要的低效。 我建议你改用$(通配符),这是一个GNU使内置的功能设计,只是这个目的:
SRCS = $(wildcard *.C)
OBJS = $(patsubst %.C,%.o,$(SRCS))
foo: $(OBJS)
$(CC) -o $@ $^
%.o: %.C
$(CC) $(CPFLAGS) -c $<
如果你正在寻找的东西更简洁,下面的工作太:
foo: $(patsubst %.C,%.o,$(wildcard *.C))
这只是消除了变量和采取的是GNU化妆提供了一个默认的事实的优点%.o: %.C
方式规则,以及从一组对象连接在一起的可执行文件默认规则。 亲自担任我觉得更容易阅读和维护,但各有所爱,我会用更详细的版本。
希望帮助,
埃里克祈祷
这是一个示例模式规则 ,它应该在正常工作gmake
。 对于非常简单的构建这样就可以主要依靠的潜规则 。 主要的事情你必须要建立目标和它的依赖指定:
CXXFLAGS:=-g -O -Iincludes
LDFLAGS:=-lm
SRCS:=$(shell ls *.C) # select all .C files as source
OBJS:=$(substr .C,.o,$(SRCS) # list the corresponding object files
foo : $(OBJS)
注意使用的简单扩展变量赋值运算符( :=
),而不是递归赋值运算符( =
),它可以减少再加工量确实做出更复杂的构建。