Как установить / скомпилировать код SDL2 C на Linux / Ubuntu

В настоящее время я занимаюсь программированием на C, и я действительно хочу использовать библиотеку SDL. Я хочу создать небольшую 2D-игру в C на Linux, чтобы немного улучшить свои навыки.

Моя проблема в том, что я не супер-пользователь Makefile или библиотека на суперпользователе Linux, я просто настраиваю вещи один раз, когда на проекте и все.

Поэтому у меня есть проблемы с компиляцией SDL2-программ на UBUNTU 14.04.

Я загрузил последнюю библиотеку SDL с: http://www.libsdl.org/download-2.0.php

Затем я установил его с шагом по умолчанию:

./configure make sudo make install 

После этого я вижу, что есть что-то в / usr / include / SDL2, поэтому я предполагаю, что он установлен.

 #include  #include  #include  int main(int argc, char *argv[]) { printf(“SDL test\n”); return 0; } 

Поскольку я все еще изучаю Makefile и SDL, я не понял, как это сделать.

но я нашел этот Makefile для компиляции старого SDL, а не SDL2

 CPP=gcc CFLAGS=-O3 LDFLAGS=-lSDL -lSDL_mixer #Linker EXEC=test all: ${EXEC} ${EXEC}: ${EXEC}.o ${CPP} $(CFLAGS) -o ${EXEC} ${EXEC}.o ${LDFLAGS} ${EXEC}.o: ${EXEC}.c ${CPP} $(CFLAGS) -o ${EXEC}.o -c ${EXEC}.c clean: rm -fr *.o mrproper: clean rm -fr ${EXEC} 

Но этот Makefile не работает для меня, он говорит, что он не знает lSDL_Mixer и другие вещи.

Как я могу создать работоспособный Makefile для компиляции C-программы с SDL2 с помощью Makefile и vim-редактора.

Заранее спасибо за помощь

Я пойду и очищу Makefile для вас.

 CFLAGS = -O3 LDFLAGS = appname = test all: $(appname) clean: rm -f $(appname) *.o .PHONY: all clean sdl_cflags := $(shell pkg-config --cflags sdl2 SDL2_mixer) sdl_libs := $(shell pkg-config --libs sdl2 SDL2_mixer) override CFLAGS += $(sdl_cflags) override LIBS += $(sdl_libs) $(appname): test.o $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) 

объяснение

  • Переменные в make-файле должны использоваться с $(...) , а не ${...} .

  • pkg-config имеет запись для SDL_Mixer, sdl-config – нет. pkg-config гораздо более общий.

  • использование override с флагами SDL позволяет вам запускать что-то вроде make CFLAGS="-O0 -g" без нарушения поддержки SDL.

  • Это действительно важно: флаги библиотеки SDL должны находиться в конце командной строки в LIBS , из-за того, что компоновщик GNU чувствителен к порядку, в котором указаны библиотеки.

  • Вам не нужны явные правила для .c файлов, потому что GNU Make имеет неявные правила, которые в порядке.

Обратите внимание, что в этом make-файле есть некоторые очень важные функции. Например, он не будет автоматически перекомпилировать вещи при изменении файлов заголовков. Я бы рекомендовал вам использовать другую систему сборки, такую ​​как CMake или SCons, которая обрабатывает это автоматически. Вы также можете сделать это с помощью Make, но вам придется вставить несколько скрытых строк кода в ваш make-файл.

Вы можете использовать sdl2-config как предложено в FAQ по SDL Linux, чтобы получить требуемые флаги компилятора и компоновщика:

 SDL_CFLAGS := $(shell sdl2-config --cflags) SDL_LDFLAGS := $(shell sdl2-config --libs) CFLAGS := $(SDL_CFLAGS) -O3 LDFLAGS := $(SDL_LDFLAGS) -lSDL_mixer 

Он найдет местоположение вашего SDL.h и вернет соответствующий флаг (например, -I/usr/include/SDL2 в вашем случае) среди других флагов, которые он сочтет необходимыми (например, для меня он дает -D_THREAD_SAFE ). И тогда вы можете просто #include , который является стандартным способом включения SDL.