Модифицируйте Makefile для упрощения фреймворка #include path - PullRequest
0 голосов
/ 04 октября 2018

Вопрос

Есть ли способ изменить путь INCLUDE для фреймворков в Makefile, чтобы иметь возможность упростить <SDL2/SDL.h> до <SDL.h>, как это используется в Windows?

Справочная информация

Я пытаюсь отредактировать Makefile моей команды, чтобы обеспечить кроссплатформенную поддержку нативных форм библиотек и сред Mac, в дополнение к существующим библиотекам Windows, чтобы мы могли сохранить код так же просто, каквозможно.

Мне известно, что #ifdef __APPLE_CC__ используется для переноса кода, специфичного для Mac, но перенос каждого экземпляра <SDL2/SDL.h> и <SDL.h> по отдельности кажется чрезмерным.

Включения, необходимые дляlibs в Windows:

#include <SDL.h>
#include <SDL_image.h>

Включает необходимые для фреймворков в Mac:

#include <SDL2/SDL.h>
#include <SDL2_Image/SDL_image.h>

Makefile (Incomplete)

# Windows part

ifeq ($(OS), Windows_NT)
    DETECTED_OS = $(OS)
    CC = g++ -std=c++11
    CFLAGS = -c -IC:/mingwdev/include/SDL2
    INCLUDE = -IC:/mingwdev/include/SDL2
    LFLAGS = -LC:/mingwdev/lib -lmingw32 -lSDL2main -lSDL2 -lSDL2_image -o $(OUT)
    LFLAGScr = -LC:/mingwdev/lib -lmingw32 -lSDL2main -lSDL2 -lSDL2_image

# Mac part

else ifeq ($(shell uname -s), Darwin)
    DETECTED_OS := $(shell uname -s)
    CC = g++ -std=c++11
    CFLAGS = -c -F/Library/Frameworks        # THIS IS WHAT I WANT TO MODIFY #
    INCLUDE = -F/Library/Frameworks          # THIS IS WHAT I WANT TO MODIFY #
    LFLAGS = -framework SDL2 -framework SDL2_image -framework SDL2_ttf -o $(OUT) 
    LFLAGScr = -framework SDL2 -framework SDL2_image -framework SDL2_ttf


# Final Part

all: $(OUT)  

$(OUT): $(OBJ)
    $(CC) $^ $(INCLUDE) $(LFLAGS) 

obj/%.o: src/%.cpp $(DEP)
    $(CC) $< $(CFLAGS) -o $@

1 Ответ

0 голосов
/ 12 октября 2018

Чтобы использовать #include <SDL.h>, как это делает аналог Windows, необходимо указать путь к заголовкам в рамках среды с помощью команды -I, а также сообщить компилятору, что он использует среду с -F.

Две строки в Makefile будут выглядеть следующим образом:

CFLAGS = -c -I/Library/Frameworks/SDL2.framework/Headers -F/Library/Frameworks/
INCLUDE = -I/Library/Frameworks/SDL2.framework/Headers -F/Library/Frameworks/

Чтобы включить вторую библиотеку, такую ​​как SDL_image, вы просто должны сделать:

CFLAGS = -c -I/Library/Frameworks/SDL2.framework/Headers  -I/Library/Frameworks/SDL2_image.framework/Headers -F/Library/Frameworks/
INCLUDE = -I/Library/Frameworks/SDL2.framework/Headers -I/Library/Frameworks/SDL2_image.framework/Headers -F/Library/Frameworks/

(Не за что, я и сообщество.)

...