gpt4 book ai didi

c++ - 如何在 Makefile 中正确使用变量?

转载 作者:太空狗 更新时间:2023-10-29 21:04:08 24 4
gpt4 key购买 nike

我正在学习创建一个简单的乒乓球游戏的教程,并想尝试使用 makefile。我做了一些研究并写了一个,但我无法让它工作。
这就是我的项目文件夹的样子。

project/
|__include/
| |__*.h
|__release/
| |__obj/
| |__Makefile
|__src/
|__*.cpp

这是我的生成文件:

CXX         :=  g++

# Directories
SDIR := ../src
IDIR := ../include
ODIR := ./obj
VPATH := $(SDIR)

# Files
_SRCS := stdafx.cpp Pang.cpp Game.cpp MainMenu.cpp SplashScreen.cpp
SRCS := $(patsubst %,$(SDIR)/%,$(_SRCS))
_DEPS := stdafx.h Game.h MainMenu.h SplashScreen.h
DEPS := $(patsubst %,$(IDIR)/%,$(_DEPS))
_OBJS := $(_SRCS:.cpp=.o)
OBJS := $(patsubst %,$(ODIR)/%,$(_OBJS))
EXES := Pang

# Parameters
CXXFLAGS := -O2 -g -Wall -fmessage-length=0
LIBS := -lsfml-audio -lsfml-graphics -lsfml-window -lsfml-system

# Default rule
all: $(SRCS) $(EXES)

# Generic compilation rule
$(ODIR)%.o : %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@

# Link object files
$(EXES): $(OBJS)
$(CXX) $(CXXFLAGS) -o $@ $^ $(LIBS)

# Clean Rule
clean:
rm -f $(ODIR)/*.o $(EXES)

当我运行 make 时,这是我得到的:

make all 
make: *** No rule to make target `obj/stdafx.o', needed by `Pang'. Stop.

SFML 之前似乎可以正常工作,所以我认为这不是问题所在。
任何帮助都会很棒!

最佳答案

这个:

$(ODIR)%.o : %.cpp

应该是:

$(ODIR)/%.o : %.cpp

(注意斜杠)

第一个是期望创建像 ./objstdafx.o 这样的文件的规则。第二个需要像 ./obj/stdafx.o 这样的文件。所以对于第一个,make 不知道如何构建 obj/stdafx.o

参见 documentation有关模式匹配规则的更多信息。

关于c++ - 如何在 Makefile 中正确使用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12128978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com