2016-01-21 55 views
0

我正嘗試使用YouTube上的tut創建Makefile。 繼嘖嘖,我有高達這樣的: 的Makefile:Makefile中的錯誤

COMPILER = g++ 

LIBS = particle/Source/ 

INCLUDE_PATH = /particle 

SRC = $(wildcard *.cpp) 

COMPILER_FLAGS = -w 

SOURCE_FILES = Origin.cpp Particle.cpp Texture.cpp 

LINKER_FLAGS = -lSDL2 -lSDL2_image.h 

executables : 
    mkdir Executables/ 
    for dir in ${LIBS}; do \ 
     # cd $$dir \ 
     ${COMPILER} ${COMPILER_FLAGS} ${LINKER_FLAGS} ${SRC} -I../; \ 
     mv *.o ../../Executables; \ 
     cd -; \ 
    done 

clean: 
    rm -rf Executables/ 

我的文件夾結構是:

|-- particle 
| |-- Executables 
| |-- Headers 
| |-- Makefile 
| `-- Source 
|  |-- Header.h 
|  |-- Main.cpp 
|  |-- Origin.cpp 
|  |-- Origin.h 
|  |-- Particle.cpp 
|  |-- Particle.h 
|  |-- Texture.cpp 
|  `-- Texture.h 

我得到的錯誤是:
在/ usr/bin中/ LD:不能找到-lSDL2_image.h
collect2:錯誤:LD返回1退出狀態
MV:不能STAT '*的.o':沒有這樣的文件或目錄

我不知道如何解決這個問題,因爲我對Make是全新的(這是我的第一次嘗試)。所以請告訴我錯誤是什麼。 也請告訴我應該做什麼,如果我想保持.h文件在頭文件目錄。

回答

0

錯誤意味着鏈接器無法找到SDL2_image.h

你的意思是被鏈接的頭文件作爲庫?因爲這似乎有點奇怪。鏈接器需要庫或(如果直接調用它)目標文件,而不是頭文件。從您的LINKER_FLAGS中刪除SDL2_image.h。另請參見G ++參數-l,這是這裏提供的文檔:https://gcc.gnu.org/onlinedocs/gcc-3.0/gcc_3.html#SEC16

關於第二個問題,由您的cpp文件需要的頭文件,通過CPP文件一般都包括在內。您的include目錄告訴編譯器在哪裏查找其他文件。你應該確保你的INCLUDE_PATH被設置爲你項目的根目錄(現在它被設置爲/ particle,但你可能想把它設置爲粒子的絕對路徑)。那麼你可以參考頭文件如下:

#include <Headers/myheader.h>