这是我的Makefile:
NAME = pong
SRCS = src/main.cpp
OBJS = $(SRCS:.cpp=.o)
CFLAGS += -lsfml-graphics -lsfml-window -lsfml-system -I include/
all: $(NAME)
$(NAME): $(OBJS)
g++ -o $(NAME) $(SRCS) $(CFLAGS)
clean:
rm -f $(OBJS)
fclean: clean
rm -f $(NAME)
re: fclean all
.PHONY: all clean fclean re
当我make
时,它告诉我,我在main.ccp中包含的标题不存在。
#include "prototypes.hpp"
这是我的项目组织:
.
├── a.out
├── include
│ └── prototypes.hpp
├── Makefile
├── src
│ └── main.cpp
└── test
最奇怪的是,当我这样做时,这项工作
g++ -o test src/main.cpp -lsfml-graphics -lsfml-window -lsfml-system -I include/
知道为什么吗?
答案 0 :(得分:1)
使用您的规则
$(NAME): $(OBJS)
$(OBJS)
的依赖关系将首先运行make
隐式℅.o : ℅.cpp
规则,而后者又使用$CXXFLAGS
,因此看不到-I
选项
在编写规则时,只需省略对$(OBJS)
的依赖。