【发布时间】:2010-09-23 00:16:59
【问题描述】:
我正在做一个发展很快的项目,保持目标文件的最新状态是不可能的。通配符命令之外的问题介于“我不想要递归生成文件”和“我不希望它手动列出”之间。这些对象应该进入一个单独的目录,该目录已经有效。 注意:我不是那个习惯于制作文件的,我知道基础知识,但除了...
所以我的问题: 如何递归扫描 src 文件夹并以智能方式进行扫描?
我已经用多个 SRC 变量完成了,但这很丑陋,而且随着目录数量的增加,整个 makefile 变得混乱。
我目前使用的是:
OS = Linux
VERSION = 0.0.1
CC = /usr/bin/gcc
CFLAGS = -Wall -g -D_REENTRANT -DVERSION=\"$(VERSION)\"
LDFLAGS = -lm `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0`
BUILDDIR = build
SOURCEDIR = src
HEADERDIR = src
SOURCES = $(wildcard $(SOURCEDIR)/*.c)
OBJECTS = $(patsubst $(SOURCEDIR)/%.c, $(BUILDDIR)/%.o, $(SOURCES))
NAME = cinnamon
BINARY = cinnamon.bin
ECHO = echo
RM = rm -rf
MKDIR = mkdir
INSTALL = install
.PHONY: all clean setup
all: $(BINARY)
$(BINARY): $(BUILDDIR)/$(OBJECTS)
$(CC) $(CFLAGS) $(LDFLAGS) -I$(HEADERDIR) -I$(SOURCEDIR) $(OBJECTS) -o $(BINARY)
$(BUILDDIR)/%.o: $(SOURCEDIR)/%.c
$(CC) $(CFLAGS) $(LDFLAGS) -I$(HEADERDIR) -I$(SOURCEDIR) -c $< -o $@
setup:
$(MKDIR) -p $(BUILDDIR)
install:
$(INSTALL) -m 755 -o 0 -g 0 -d $(DESTDIR)/usr/local/bin/
$(INSTALL) -m 755 -o 0 -g 0 $(BINARY) $(DESTDIR)/usr/local/bin/$(BINARY)
$(INSTALL) -m 755 -o 0 -g 0 -d $(DESTDIR)/usr/local/$(NAME)/ui/
$(INSTALL) -m 644 -o 0 -g 0 ./ui/*.ui $(DESTDIR)/usr/local/$(NAME)/ui/
# $(INSTALL) -m 755 -o 0 -g 0 -d $(DESTDIR)/usr/local/$(NAME)/model/
# $(INSTALL) -m 644 -o 0 -g 0 ./model/*.model $(DESTDIR)/usr/local/$(NAME)/model/
clean:
$(RM) $(BINARY) $(OBJECTS)
distclean: clean
help:
@$(ECHO) "Targets:"
@$(ECHO) "all - buildcompile what is necessary"
@$(ECHO) "clean - cleanup old .o and .bin"
@$(ECHO) "install - not yet fully supported"
感谢回答 #1,它归结为如何解决这个问题:
$(BUILDDIR)/%.o: $(SOURCEDIR)/%.c
$(CC) $(CFLAGS) $(LDFLAGS) $(SOURCETREE) -c $< -o $@
尤其是在 BUILDDIR = build 和 SOURCEDIR 必须用来自 SOURCES 的单个 .c 文件(包括它们的路径)替换的情况下:/
【问题讨论】: