J'ai ajouté des sources au fichier makefile inclus pour un projet. Comme c'est le cas actuellement, cela fonctionne parfaitement. Mais si je les deux lignes décommenter indiquées dans le code, faire l'erreur recrache suivante:Y at-il une limite à la taille d'une variable dans un fichier makefile?
make: *** No rule to make target 'engine/obj/graphics/window.o', needed by 'lib/engine.a'. Stop.
Je suppose, car il est juste couper le début de son quelque chose à la longueur. Si c'est une limitation de la longueur de la variable, y a-t-il un moyen de contourner le problème?
CXX = g++
CXXFLAGS = -std=c++11 -g -Wall -Wextra
OUT_DIR=out
LIB_OUT_DIR=lib
APP_NAME=main
ENGINE_NAME=engine.a
EXECUTABLE=$(OUT_DIR)/$(APP_NAME)
ENGINE_LIB=$(LIB_OUT_DIR)/$(ENGINE_NAME)
ENGINE_OBJECT_DIR=engine/obj
ENGINE_HEADER_DIR=engine/include
ENGINE_SOURCE_DIR=engine/src
ENGINE_SHADER_DIR=engine/shaders
APP_OBJECT_DIR=app/obj
APP_SOURCE_DIR=app/src
ENGINE_OBJECTS = $(ENGINE_OBJECT_DIR)/graphics/window.o
ENGINE_OBJECTS += $(ENGINE_OBJECT_DIR)/graphics/shader_program.o
ENGINE_OBJECTS += $(ENGINE_OBJECT_DIR)/graphics/array.o
ENGINE_OBJECTS += $(ENGINE_OBJECT_DIR)/graphics/attribute_definition.o
ENGINE_OBJECTS += $(ENGINE_OBJECT_DIR)/graphics/abstract/buffer.o
ENGINE_OBJECTS += $(ENGINE_OBJECT_DIR)/graphics/simple_buffer.o
# ENGINE_OBJECTS += $(ENGINE_OBJECT_DIR)/graphics/instance_buffer.o
ENGINE_OBJECTS += $(ENGINE_OBJECT_DIR)/graphics/index_buffer.o
ENGINE_OBJECTS += $(ENGINE_OBJECT_DIR)/math/vec2.o
ENGINE_OBJECTS += $(ENGINE_OBJECT_DIR)/math/vec3.o
ENGINE_OBJECTS += $(ENGINE_OBJECT_DIR)/math/vec4.o
ENGINE_OBJECTS += $(ENGINE_OBJECT_DIR)/math/mat4.o
ENGINE_OBJECTS += $(ENGINE_OBJECT_DIR)/util/logging.o
ENGINE_SOURCES = $(ENGINE_SOURCE_DIR)/graphics/window.cpp
ENGINE_SOURCES += $(ENGINE_SOURCE_DIR)/graphics/shader_program.cpp
ENGINE_SOURCES += $(ENGINE_SOURCE_DIR)/graphics/array.cpp
ENGINE_SOURCES += $(ENGINE_SOURCE_DIR)/graphics/attribute_definition.cpp
ENGINE_SOURCES += $(ENGINE_SOURCE_DIR)/graphics/abstract/buffer.cpp
ENGINE_SOURCES += $(ENGINE_SOURCE_DIR)/graphics/simple_buffer.cpp
# ENGINE_SOURCES += $(ENGINE_SOURCE_DIR)/graphics/instance_buffer.cpp
ENGINE_SOURCES += $(ENGINE_SOURCE_DIR)/graphics/index_buffer.cpp
ENGINE_SOURCES += $(ENGINE_SOURCE_DIR)/math/vec2.cpp
ENGINE_SOURCES += $(ENGINE_SOURCE_DIR)/math/vec3.cpp
ENGINE_SOURCES += $(ENGINE_SOURCE_DIR)/math/vec4.cpp
ENGINE_SOURCES += $(ENGINE_SOURCE_DIR)/math/mat4.cpp
ENGINE_SOURCES += $(ENGINE_SOURCE_DIR)/util/logging.cpp
ENGINE_SHADERS = \
$(OUT_DIR)/vertexshader.glsl \
$(OUT_DIR)/fragmentshader.glsl
APP_OBJECTS = \
$(APP_OBJECT_DIR)/main.o
APP_SOURCES = \
$(APP_SOURCE_DIR)/main.cpp
ENGINE_CXX_LIBS=-Wl,-Bstatic -lGLEW -lglfw3 -pthread -Wl,-Bdynamic -lGL -lGLU -ldl -lX11 -lXi -lXxf86vm -lXrandr -lXcursor -lXinerama
APP_CXX_LIBS=-L$(LIB_OUT_DIR) -l:$(ENGINE_NAME)
.PHONY: all build clean engine app run
all: clean build run
clean:
rm -f $(OUT_DIR)/* $(LIB_OUT_DIR)/* $(ENGINE_OBJECTS) $(APP_OBJECTS)
build: engine app
run:
cd $(OUT_DIR) && \
./$(APP_NAME)
engine: $(ENGINE_LIB) $(ENGINE_SHADERS)
app: $(EXECUTABLE)
$(ENGINE_OBJECT_DIR)/%.o: $(ENGINE_SOURCE_DIR)/%.cpp $(ENGINE_SOURCES)
$(CXX) -I$(ENGINE_HEADER_DIR) -c -o [email protected] $< $(CXXFLAGS)
$(ENGINE_LIB): $(ENGINE_OBJECTS)
ar rvs [email protected] $(ENGINE_OBJECTS)
$(OUT_DIR)/%.glsl: $(ENGINE_SHADER_DIR)/%.glsl
cp -f $< [email protected]
$(APP_OBJECT_DIR)/%.o: $(APP_SOURCE_DIR)/%.cpp $(APP_SOURCES)
$(CXX) -I$(ENGINE_HEADER_DIR) -c -o [email protected] $< $(CXXFLAGS)
$(EXECUTABLE): $(APP_OBJECTS)
$(CXX) -o [email protected] $^ $(APP_CXX_LIBS) $(ENGINE_CXX_LIBS)
Je pense que vous êtes sur la mauvaise voie. Il y a une limite à la taille, mais c'est généralement énorme (64K ou quelque chose comme ça), et vous êtes loin de ça ... Vous pouvez utiliser $ (info ENGINE_OBJECTS = $ (ENGINE_OBJECTS)) 'pour être sûr que c'est pas le problème après l'avoir déclaré. Je pourrais chercher des caractères cachés, et essayer d'utiliser un ': =' au lieu d'un '=' à l'étape d'assignation ... – HardcoreHenry