我还是刚接触使用GNU编译器和Makefile的Linux编程。我正在试图弄清楚如何使用各自的目标文件编译所有头文件和库。
起初这是我的Makefile:
all:
g++ main.cpp
g++ main.o -o game -lsfml-graphics -lsfml-window -lsfml-system
我目录中的文件:
main.cpp Window.h Game.h Makefile
其头文件中的所有方法。我会运行make,它会编译。然后我将所有方法移动到他们自己的.cpp文件中,所以我的目录看起来像这样:
main.cpp Window.h Window.cpp Game.h Game.cpp Makefile
然后我将Makefile改为:
CC = g++
CFLAGS = -std=c++11 -c -fpermissive
LDLIBS = -lsfml-graphics -lsfml-window -lsfml-system
SOURCES= main.cpp Window.cpp Game.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=game
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(OBJECTS) -o $@ $(LDLIBS)
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
我运行make并得到这个:
Window.cpp:105:3: error: ‘m_windowTitle’ was not declared in this scope
m_windowTitle, style);
^
Window.cpp: In member function ‘void Window::Destroy()’:
Window.cpp:110:2: error: ‘m_window’ was not declared in this scope
m_window.close();
^
Makefile:15: recipe for target 'Window.o' failed
make: *** [Window.o] Error 1
只有当我在Window.h和Game.h中包含SFML Graphics.hpp文件时才能正确编译。
Game.h:
#ifndef GAME_H
#define GAME_H
#include <SFML/Graphics.hpp>
window.h中:
#ifndef WINDOW_H
#define WINDOW_H
#include <SFML/Graphics.hpp>
如果我需要在其他头文件中包含Graphics.hpp文件,这是否正确?如果是这样,为什么我以前不需要这样做?