Updated Makefile for conditional compilation and recursive pattern searching
This commit is contained in:
parent
2002bb961b
commit
828d38f16e
8
.github/workflows/macOS.yml
vendored
8
.github/workflows/macOS.yml
vendored
@ -15,12 +15,12 @@ jobs:
|
||||
- name: make setup
|
||||
run: make setup
|
||||
|
||||
- name: make compile
|
||||
run: make compile
|
||||
- name: make bin/app
|
||||
run: make bin/app
|
||||
- name: make clean
|
||||
run: make clean
|
||||
|
||||
- name: make compile CXX=g++
|
||||
run: make compile CXX=g++
|
||||
- name: make bin/app CXX=g++
|
||||
run: make bin/app CXX=g++
|
||||
- name: make clean
|
||||
run: make clean
|
8
.github/workflows/ubuntu.yml
vendored
8
.github/workflows/ubuntu.yml
vendored
@ -19,12 +19,12 @@ jobs:
|
||||
- name: make setup
|
||||
run: make setup
|
||||
|
||||
- name: make compile
|
||||
run: make compile
|
||||
- name: make bin/app
|
||||
run: make bin/app
|
||||
- name: make clean
|
||||
run: make clean
|
||||
|
||||
- name: make compile CXX=g++
|
||||
run: make compile CXX=g++
|
||||
- name: make bin/app CXX=g++
|
||||
run: make bin/app CXX=g++
|
||||
- name: make clean
|
||||
run: make clean
|
11
.github/workflows/windows.yml
vendored
11
.github/workflows/windows.yml
vendored
@ -1,4 +1,3 @@
|
||||
|
||||
name: Windows
|
||||
|
||||
on:
|
||||
@ -18,18 +17,18 @@ jobs:
|
||||
run: mingw32-make setup
|
||||
shell: cmd
|
||||
|
||||
- name: make compile
|
||||
run: mingw32-make compile
|
||||
- name: make bin/app
|
||||
run: mingw32-make bin/app
|
||||
shell: cmd
|
||||
|
||||
- name: make clean
|
||||
run: mingw32-make clean
|
||||
shell: cmd
|
||||
|
||||
- name: make compile CXX=g++
|
||||
run: mingw32-make compile CXX=g++
|
||||
- name: make bin/app CXX=g++
|
||||
run: mingw32-make bin/app CXX=g++
|
||||
shell: cmd
|
||||
|
||||
- name: make clean
|
||||
run: mingw32-make clean
|
||||
shell: cmd
|
||||
shell: cmd
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
include
|
||||
lib
|
||||
build
|
||||
bin
|
||||
.idea
|
66
Makefile
66
Makefile
@ -1,13 +1,21 @@
|
||||
# Set general macros
|
||||
buildFile = build/app
|
||||
# Define custom functions
|
||||
rwildcard = $(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))
|
||||
|
||||
# Set global macros
|
||||
buildDir = bin
|
||||
executable = app
|
||||
target = $(buildDir)/$(executable)
|
||||
sources = $(call rwildcard,src/,*.cpp)
|
||||
objects = $(patsubst src/%, $(buildDir)/%, $(patsubst %.cpp, %.o, $(sources)))
|
||||
compileFlags = -std=c++17 -I include
|
||||
linkFlags = -L lib/$(platform) -l raylib
|
||||
|
||||
# Check for Windows
|
||||
ifeq ($(OS), Windows_NT)
|
||||
# Set Windows macros
|
||||
platform = Windows
|
||||
compiler = g++
|
||||
options = -pthread -lopengl32 -lgdi32 -lwinmm -mwindows
|
||||
sources = src/main.cpp
|
||||
CXX ?= g++
|
||||
linkFlags += -pthread -lopengl32 -lgdi32 -lwinmm -mwindows
|
||||
THEN = &&
|
||||
else
|
||||
# Check for MacOS/Linux
|
||||
@ -15,33 +23,26 @@ else
|
||||
ifeq ($(UNAMEOS), Linux)
|
||||
# Set Linux macros
|
||||
platform = Linux
|
||||
compiler = g++
|
||||
options = -l GL -l m -l pthread -l dl -l rt -l X11
|
||||
libGenDirectory = # Empty
|
||||
CXX ?= g++
|
||||
linkFlags += -l GL -l m -l pthread -l dl -l rt -l X11
|
||||
endif
|
||||
ifeq ($(UNAMEOS), Darwin)
|
||||
# Set macOS macros
|
||||
platform = macOS
|
||||
compiler = clang++
|
||||
options = -framework CoreVideo -framework IOKit -framework Cocoa -framework GLUT -framework OpenGL
|
||||
libGenDirectory = src
|
||||
CXX ?= clang++
|
||||
linkFlags += -framework CoreVideo -framework IOKit -framework Cocoa -framework GLUT -framework OpenGL
|
||||
libGenDir = src
|
||||
endif
|
||||
|
||||
# Set UNIX macros
|
||||
sources = $(shell find src -type f -name '*.cpp')
|
||||
THEN = ;
|
||||
endif
|
||||
|
||||
# Explicitly set compiler to platform default if unset
|
||||
ifeq ($(CXX),)
|
||||
CXX = $(compiler)
|
||||
endif
|
||||
|
||||
# Lists phony targets for Makefile
|
||||
.PHONY: all setup submodules compile execute clean
|
||||
.PHONY: all setup submodules execute clean
|
||||
|
||||
# Default target, compiles, executes and cleans
|
||||
all: compile execute clean
|
||||
all: $(target) execute clean
|
||||
|
||||
# Sets up the project for compiling, generates includes and libs
|
||||
setup: include lib
|
||||
@ -70,29 +71,30 @@ ifeq ($(platform), Windows)
|
||||
-robocopy "vendor\raylib-cpp\vendor\raylib\src" "lib\Windows" libraylib.a
|
||||
else
|
||||
mkdir -p lib/$(platform)
|
||||
cp vendor/raylib-cpp/vendor/raylib/$(libGenDirectory)/libraylib.a lib/$(platform)/libraylib.a
|
||||
cp vendor/raylib-cpp/vendor/raylib/$(libGenDir)/libraylib.a lib/$(platform)/libraylib.a
|
||||
endif
|
||||
|
||||
# Create the build folder
|
||||
build:
|
||||
# Link the program and create the executable
|
||||
$(target): $(objects)
|
||||
$(CXX) $(objects) -o $(target) $(linkFlags)
|
||||
|
||||
# Compile objects to the build directory
|
||||
$(buildDir)/%.o: src/%.cpp
|
||||
ifeq ($(platform), Windows)
|
||||
-mkdir build
|
||||
-mkdir $(@D)
|
||||
else
|
||||
mkdir -p build
|
||||
mkdir -p $(@D)
|
||||
endif
|
||||
|
||||
# Create the build folder and compile the executable
|
||||
compile: build
|
||||
$(CXX) -std=c++17 -I include -L lib/$(platform) $(sources) -o $(buildFile) -l raylib $(options)
|
||||
$(CXX) -c $(compileFlags) $< -o $@
|
||||
|
||||
# Run the executable
|
||||
execute:
|
||||
$(buildFile)
|
||||
$(target)
|
||||
|
||||
# Clean up all relevant files
|
||||
clean:
|
||||
ifeq ($(platform), Windows)
|
||||
-del build\app.exe
|
||||
-del /S $(buildDir)\*
|
||||
else
|
||||
rm $(buildFile)
|
||||
endif
|
||||
rm -rf $(buildDir)/*
|
||||
endif
|
@ -1,5 +1,5 @@
|
||||
# Raylib C++ Starter
|
||||
The Raylib C++ Starter kit is a template project that provides a simple starter template for the [raylib](https://github.com/raysan5/raylib) game tools library incorporating the [raylib-cpp](https://github.com/robloach/raylib-cpp) C++ bindings and using [Make](https://www.gnu.org/software/make/) for building. The starter kit can automatcially clone down raylib and the bindings, compile them, and setup the project for build using a static library.
|
||||
The Raylib C++ Starter kit is a template project that provides a simple starter template for the [raylib](https://github.com/raysan5/raylib) game tools library incorporating the [raylib-cpp](https://github.com/robloach/raylib-cpp) C++ bindings and using [Make](https://www.gnu.org/software/make/) for building. The starter kit can automatcially clone down raylib and the bindings, compile them, and setup the project for conditional compilation using a static library.
|
||||
|
||||
> Why static linking?
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user