【问题标题】:How to use variables properly in Makefile?如何在 Makefile 中正确使用变量?
【发布时间】:2012-08-21 04:09:56
【问题描述】:

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

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

这是我的 Makefile:

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 似乎以前可以工作,所以我认为这不是问题。
任何帮助都会很棒!

【问题讨论】:

  • 我建议您使用remake -x 来调试您的makefile 问题。您还可以使用更好的构建器,例如omake.metaprl.org
  • @BasileStarynkevitch:又一个构建系统?而这个需要整个 OCaml,好主意!
  • 许多发行版(Debian、Ubuntu 等)已经在打包 omake
  • 你有stdafx.cpp文件吗?
  • @engrato: include?它应该在 src 内,并遵循这些规则(注意 .cpp 不是 .h)。

标签: c++ makefile g++ sfml


【解决方案1】:

这个:

$(ODIR)%.o : %.cpp

应该是:

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

(注意斜线)

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

有关模式匹配规则的更多信息,请参阅documentation

【讨论】:

  • 成功了,谢谢!我还必须将-I$(IDIR) 添加到CXXFLAGS
猜你喜欢
  • 1970-01-01
  • 2018-05-31
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
相关资源
最近更新 更多