如何在Makefile中正确包含库和头文件?

时间:2016-11-07 02:54:41

标签: c++ header-files libraries sfml

我还是刚接触使用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文件,这是否正确?如果是这样,为什么我以前不需要这样做?

0 个答案:

没有答案