mirror of
https://github.com/fish-shell/fish-shell
synced 2024-11-10 15:14:44 +00:00
20db22f0fe
This lets non-developers simply `cd` into the fish source directory and execute `make` to build the project. The Makefile searches for CMake and hands over the build to it if it is available, otherwise an error message is emitted. All dependency checking is left to CMake. Non-fish-devs shouldn't have to concern themselves with what build system fish developers have chosen, and building a random C++ project should not be a chore in familiarizing one's self with all the various build platforms out there. CMake is instructed to use `ninja` if it is available, otherwise the standard Unix Makefiles generator option is used. (This has already been the behavior on BSDs since CMake was adopted.)
54 lines
1.1 KiB
Makefile
54 lines
1.1 KiB
Makefile
# This is a very basic `make` wrapper around the CMake build toolchain.
|
|
#
|
|
# Supported arguments:
|
|
# PREFIX: sets the installation prefix
|
|
# GENERATOR: explicitly specifies the CMake generator to use
|
|
|
|
CMAKE ?= cmake
|
|
|
|
GENERATOR ?= $(shell (which ninja > /dev/null 2> /dev/null && echo Ninja) || \
|
|
echo 'Unix Makefiles')
|
|
prefix ?= /usr/local
|
|
PREFIX ?= $(prefix)
|
|
|
|
ifeq ($(GENERATOR), Ninja)
|
|
BUILDFILE = build.ninja
|
|
else
|
|
BUILDFILE = Makefile
|
|
endif
|
|
|
|
all: .begin build/fish
|
|
|
|
PHONY: .begin
|
|
.begin:
|
|
@which ninja > /dev/null 2> /dev/null || \
|
|
(echo 'Please install CMake and then re-run the `make` command!' 1>&2 && false)
|
|
|
|
build/fish: build/$(BUILDFILE)
|
|
cmake --build build
|
|
|
|
build/$(BUILDFILE): build
|
|
cd build; cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -G "$(GENERATOR)" -DCMAKE_INSTALL_PREFIX="$(PREFIX)" -DCMAKE_EXPORT_COMPILE_COMMANDS=1
|
|
|
|
build:
|
|
mkdir -p build
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf build
|
|
|
|
.PHONY: test
|
|
test: build/fish
|
|
$(CMAKE) --build build --target test
|
|
|
|
.PHONY: install
|
|
install: build/fish
|
|
$(CMAKE) --build build --target install
|
|
|
|
.PHONY: run
|
|
run: build/fish
|
|
./build/fish || true
|
|
|
|
.PHONY: exec
|
|
exec: build/fish
|
|
exec ./build/fish
|