到目前为止,我一直在使用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
删除路径的目录部分?