2016-10-03 1 views
0

Хорошо, так что это абсолютно дует мне в голову. В принципе, у меня есть простой make-файл, который запускает g ++ для создания моего проекта C++ с голубыми костями с SDL2. Теперь, когда я запускаю этот make-файл, он дает мне кучу ошибок для «неопределенного почтения к« SDL_Init »и каждой функции, взятой из SDL2, которую я использую в программе. Однако, когда я копирую команду из make-файла и запускаю ее с терминала, все становится персиковым. Не меняя файл и снова запуская файл make, он просто компилируется.Makefile для приложения SDL запускается только в том случае, если проект был построен раньше времени

Я бегу Elementary OS Локи, г ++ версии 5.4.0 20160609, сделать версию 4.1, libsdl2-DEV версии 2.0.4 + dfsg1-2ubuntu2

Вот файл делают, что я использую:

Makefile

CC = g++ 

CFLAGS = -g -Wall 
LFLAGS = -lSDL2 

ONAME = patchworkrpg 

all: $(ONAME) 
    $(CC) $(ONAME).cpp $(LFLAGS) -o $(ONAME) 

patchworkrpg.cpp

#include <stdio.h> 


using namespace std; 

const int SCREEN_WIDTH = 640; 
const int SCREEN_HEIGHT = 480; 


int main(int argc, char* args[]) { 
    SDL_Window* window = NULL; 

    SDL_Surface* surface = NULL; 
    if(SDL_Init(SDL_INIT_VIDEO) < 0) { 
     cout << "SDL Failed to init\n"; 
    } 
    else 
    { 

    } 
} 

Я полосатые из некоторые из лишних вещей, которые у меня были там, но это суть этого. Как я уже сказал, единственное, что вызывает ошибки, - это make-файл, когда он запущен, без того, чтобы указанный выше файл был скомпилирован вне make-файла с одинаковой командой.

EDIT: Экстра Информация

Ошибки при выполнении Makefile:

g++  patchworkrpg.cpp -o patchworkrpg 
/tmp/cctyEbxS.o: In function `main': 
patchworkrpg.cpp:(.text+0x25): undefined reference to `SDL_Init' 
patchworkrpg.cpp:(.text+0x62): undefined reference to `SDL_CreateWindow' 
patchworkrpg.cpp:(.text+0x8a): undefined reference to `SDL_GetWindowSurface' 
patchworkrpg.cpp:(.text+0x98): undefined reference to `SDL_Delay' 
collect2: error: ld returned 1 exit status 
<builtin>: recipe for target 'patchworkrpg' failed 
make: *** [patchworkrpg] Error 1 

Команда набранная в терминале, который работает просто отлично:

g++ patchworkrpg.cpp -lSDL2 -o patchworkrpg 

Я также попытался запустить что точное команды из файла makefile, и он сбой с точно такими же ошибками

+0

Не могли бы вы по крайней мере, добавить * полный * выход из вашей компиляции? Должно быть слишком долго, так как есть только один вызов функции SDL. Без этого это больше похоже на догадки. – keltar

+0

Также введите команду в командной строке. –

ответ

2

(Ваш пример Makefile и исходный файл были неполными, так что мне пришлось изменить их, чтобы проверить это.)

В вашем Makefile:

ONAME = patchworkrpg 

all: $(ONAME) 
    $(CC) $(ONAME).cpp $(LFLAGS) -o $(ONAME) 

all зависит от patchworkrpg, но нет никакого правила, чтобы сделать patchworkrpg , поэтому make создает неявное правило g++ patchworkrpg.cpp -o patchworkrpg, которое вы видите на лету.

Не совсем уверен, как вы пытаетесь организовать вещи, но на самом деле запустить свою собственную командную строку это изменение должно исправить:

all: $(ONAME).cpp

+0

Я думаю, мне нужно продолжать учиться, спасибо большое –

Смежные вопросы