从数组中的每个路径中删除目录

时间:2015-11-25 18:09:47

标签: makefile gnu-make

到目前为止,我一直在使用shell脚本编译我的c和c ++(以及一个小glsl)项目,即使我想进行一个简单的小改动,也会重新编译整个事件。它开始花了将近5秒钟。我无法忍受,所以我转向Makefiles。我认为我的Makefile目前还不错,除了一个问题:当我将CSOURCES转换为COBJECTS时,我不会删除源文件所在的目录,因此我收到这些错误:

clang: error: no such file or directory: 'lib/key_store.o'
clang: error: no such file or directory: 'lib/logger.o'
clang: error: no such file or directory: 'lib/myglutils.o'

这是makefile:

CC=gcc
CPPC=g++
CCFLAGS=-std=c11 -Wall -pedantic
CPPFLAGS=-std=c++11 -Wall -pedantic
INC=-Iinclude/
LDFLAGS=lib/libGLEW.a lib/libglfw3.a -framework OpenGL -framework CoreVideo -framework Cocoa -framework IOKit
CSOURCES=$(wildcard lib/*.c)
COBJECTS=$(CSOURCES:.c=.o)
CPPSOURCES=$(wildcard *.cpp)
CPPOBJECTS=$(CPPSOURCES:.cpp=.o)
TARGET=Ultra-Fighters

all: $(TARGET)

$(TARGET): $(COBJECTS) $(CPPOBJECTS)
    $(CPPC) -o $@ $^ $(LDFLAGS)

%.o: %.cpp %.hpp
    $(CPPC) $(CPPFLAGS) $(INC) -c $<

%.o: %.cpp
    $(CPPC) $(CPPFLAGS) $(INC) -c $<

%.o: %.c %.h
    $(CC) $(CFLAGS) $(INC) -c $<

%.o: %.c
    $(CC) $(CCFLAGS) $(INC) -c $<

clean:
    rm -f *.o

我的问题是:当我分配到CSOURCES时,如何从COBJECTS删除路径的目录部分?

1 个答案:

答案 0 :(得分:1)

对您的问题采取轻微的直接解决方案是notdir