簡體   English   中英

修改 Makefile 以簡化框架 #include 路徑

[英]Modify Makefile to simplify framework #include path

有沒有辦法修改Makefile框架的INCLUDE路徑,以便能夠將<SDL2/SDL.h>簡化為用於 Windows 的<SDL.h>

背景

我正在嘗試編輯我團隊的 Makefile,以提供對 Mac 原生形式的庫、框架以及現有 Windows 庫的跨平台支持,以便我們可以盡可能保持代碼簡單。

我知道#ifdef __APPLE_CC__被用來包裝 Mac 特定的代碼,但單獨包裝<SDL2/SDL.h><SDL.h>每個實例似乎過度。

包括 Windows 中的庫所需的:

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

包括 Mac 中的框架所需的:

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

生成文件(不完整)

# 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 $@

要使用#include <SDL.h>作為 Windows 對應項,除了讓編譯器知道它正在使用帶有-F的框架之外,您還需要使用-I命令提供框架內頭文件的路徑。

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/

(不客氣,我和社區。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM