我在下面有這個makefile。雖然它目前編譯正確,但我遇到了一個非常奇怪且乏味的問題,我必須運行兩次make
來編譯代碼。makefile需要被調用兩次
我第一次打電話make
,我得到這個錯誤:
./src/gravity.cpp:1:31: fatal error: gravity.h: No such file or directory
compilation terminated.
我OBJECTS = ..
下,增加了更多的源文件,併爲他們中的每一個消息重複。當然,這表示我沒有正確鏈接標題,除了當我再次運行make
時,所有內容都能順利編譯。
一個有趣的觀察可能是main.cpp
不會抱怨丟失的gravity.h
,但我不確定它是如何關聯的。
我在所有的頭文件中都有頭文件。如果有幫助,這是針對C++ SDL/OpenGL應用程序的。
我的makefile文件如下。謝謝!
OUTPUT_NAME = output_file
INC_DIR = ./inc
SRC_DIR = ./src
BIN_DIR = ./bin
INCLUDES= \
-I${SRC_DIR}
SRC := $(shell find $(SRC_DIR) -name '*.cpp')
INC := $(shell find $(INC_DIR) -name '*.h')
CXX = g++
CXXFLAGS = -g -Wall -std=c++0x -I${INC_DIR} -I./lib/glm
LIBFLAGS = -lSDL -lGL -lGLU -lglut
OBJECTS = \
${BIN_DIR}/main.o \
${BIN_DIR}/gravity.o
DEPS = $(BIN_DIR)/${OUTPUT_NAME}.deps
all: ${DEPS} ${OUTPUT_NAME}
${DEPS}: ${INC} ${SRC}
@${CXX} -M ${SRC} > ${DEPS}
${OUTPUT_NAME}: ${OBJECTS}
${CXX} ${CXXFLAGS} ${OBJECTS} -o ${OUTPUT_NAME} ${LIBFLAGS}
${OBJECTS}: ${BIN_DIR}/%.o : ${SRC_DIR}/%.cpp
${CXX} ${CXXFLAGS} $< -c -o [email protected]
force:
$(MAKE) fullclean
$(MAKE)
clean:
rm ${OBJECTS} ${OUTPUT_NAME}
fullclean:
rm ${OBJECTS} ${DEPS} ${OUTPUT_NAME}
run:
clear
./${OUTPUT_NAME}
style:
astyle --style=java --indent=spaces=4 ${SRC} ${INC}
.PHONY: all clean fullclean run style force
include $(DEPS)
人們還在使用make! Gradle或SCONS更好 –
是的,很多人仍然使用'make'。 –
@JonathanLeffler - 哦,親愛的。猜猜有些沒有聽說過這種新式的機器馬少車 –