我已经开始使用我的第一个Makefile。我正在使用libtcod库在C++中编写类似于rogue的程序,并具有以下hello world程序来测试我的环境是否正常运行:
#include "libtcod.hpp"
int main()
{
TCODConsole::initRoot(80, 50, "PartyHack");
TCODConsole::root->printCenter(40, 25, TCOD_BKGND_NONE, "Hello World");
TCODConsole::flush();
TCODConsole::waitForKeypress(true);
}
我的项目目录结构如下所示:
/CppPartyHack
----/libtcod-1.5.1 # this is the libtcod root folder
--------/include
------------libtcod.hpp
----/PartyHack
--------makefile
--------partyhack.cpp # the above code
(当我们在这里时,如何进行适当的缩进?使用这些破折号很愚蠢。)
这是我的makefile:
SRCDIR = .
INCDIR = ../libtcod-1.5.1/include
CFLAGS = $(FLAGS) -I$(INCDIR) -I$(SRCDIR) -Wall
CC = gcc
CPP = g++
.SUFFIXES: .o .h .c .hpp .cpp
$(TEMP)/%.o : $(SRCDIR)/%.cpp
$(CPP) $(CFLAGS) -o $@ -c $<
$(TEMP)/%.o : $(SRCDIR)/%.c
$(CC) $(CFLAGS) -o $@ -c $<
CPP_OBJS = $(TEMP)partyhack.o
all : partyhack
partyhack : $(CPP_OBJS)
$(CPP) $(CPP_OBJS) -o $@ -L../libtcod-1.5.1 -ltcod -ltcod++ -Wl,-rpath,.
clean :
\rm -f $(CPP_OBJS) partyhack
我正在使用Ubuntu,并且终端显示以下错误:
max @ max-desktop:〜/ Desktop / Development / CppPartyhack / PartyHack $ make
g++ -c -o partyhack.o partyhack.cpp
partyhack.cpp:1:23:错误:libtcod.hpp:没有这样的文件或目录
partyhack.cpp:在“int main()”函数中:
partyhack.cpp:5:错误:尚未声明“TCODConsole”
partyhack.cpp:6:错误:尚未声明“TCODConsole”
partyhack.cpp:6:错误:在此范围内未声明“TCOD_BKGND_NONE”
partyhack.cpp:7:错误:尚未声明“TCODConsole”
partyhack.cpp:8:错误:尚未声明“TCODConsole”
制作:*** [partyhack.o]错误1
因此很明显,makefile找不到libtcod.hpp。我已经仔细检查过,并且我确定INCDIR中libtcod.hpp的相对路径是正确的,但是由于我只是从makefile开始,所以我不确定还有什么错误。我的makefile基于libtcod设计人员提供的模板以及库本身,尽管我看过一些在线makefile教程,但该makefile中的代码比该教程显示的任何示例都复杂得多。 ,所以我假设我在转换中搞砸了一些基本知识。谢谢你的帮助。
最佳答案
这里发生的是
1)make评估目标all
,它解析为partyhack
。
2)make评估目标partyhack
,它解析为$(CPP_OBJS)
3)make评估目标$(CPP_OBJS)
,它解析为$(TMP)partyhack.o
4)make评估解析为$(TMP)partyhack.o
的目标partyhack.o
这是因为未定义TMP。另请注意,$(TMP)
后缺少斜杠。
5)make评估目标partyhack.o
,并应用隐式规则g++ -c -o partyhack.o partyhack.cpp
它不应用您指定的规则,即$(TEMP)/%.o : $(SRCDIR)/%.cpp
,因为未定义TEMP,因此它的计算结果为/partyhack.o : ./partyhack.cpp
,并且由于我们不在根目录中,因此我们没有构建/partyhack.o
。
6)g++找不到包含文件,因为未将包含目录传递给它,因为未应用您的规则。
要解决此问题:
首先,您需要定义TEMP(请参阅Nick Meyers答案)。
TEMP = .
其次,您需要更改CPP_OBJS的定义(如Paul R建议的那样)。
CPP_OBJS = %(TEMP)/partyhack.o
如果您在目录CppPartyHack / PartyHack中调用make,则此方法将起作用。
关于c++ - 查找带有C++ Makefile的标题时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2852907/