修改生成文件以简化框架 #include 路径

Modify Makefile to simplify framework #include path

本文关键字:框架 #include 路径 文件 修改      更新时间:2023-10-16

问题

有没有办法修改Makefile中框架的INCLUDE路径,以便能够像用于 Windows 一样将<SDL2/SDL.h>简化为<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 $@

要像 Windows 对应项那样使用#include <SDL.h>,除了让编译器知道它正在使用具有-F的框架之外,您还需要使用-I命令提供框架内标头的路径。

生成文件中的两行将如下所示:

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/

(不客气,我自己和社区。