Как сгенерировать действие "сделать установку" с помощью gyp?

Я использую gyp для создания make файлов для моего проекта. Makefiles работают, заставляя рабочие двоичные файлы всплывать в директории "out", здесь все денди.

Однако, я хотел бы, чтобы мои make файлы имели некоторые "стандартные" действия/цели, а именно "установить" "удалить" и "очистить".

Я добавил "установить" цель в .gyp файлы, но у меня есть сомнения, если это правильный способ сделать это, тем более, что кажется, что нет способа исключить цель "установить" из "все" в make используя gyp.

Мне также интересно, есть ли инструмент для создания. /configure файлов для gyp, или если они должны быть написаны разработчиком и только запустить gyp с некоторыми необходимыми параметрами.

Каков правильный способ добавления этих целей ( "установить"...) в make файлы, созданные gyp? Можно ли это сделать таким образом, что, как только они будут указаны, эти действия будут работать и с другими системами сборки? (ниндзя и т.д.)

1 ответ

Лучшим способом, который я нашел для этого, является создание make файлов с помощью gyp в подкаталоге каталога проекта, а затем вручную написанный make файл с установками "install", "clean" и т.д., которые выполняют Makefile, сгенерированный gyp.

Чтобы убедиться, что gyp вызывается с правильными аргументами, я вызываю его из ./configure

Структура каталогов:

+ build
 |- Makefile (generated by gyp)
|- Makefile (written by hand)
|- configure (written by hand)
|- build.gyp (written by hand)

./настроить:

#!/bin/bash
PREFIX=/usr/local
BUILDTYPE=Release
for i in "$@"
do
 case $i in
 -p=*|--prefix=*)
 PREFIX="${i#*=}"
 ;;
 esac
 case $i in
 -b=*|--buildtype=*)
 BUILDTYPE="${i#*=}"
 ;;
 esac
done
gyp -D prefix="$PREFIX" -D configuration="$BUILDTYPE" --depth=. --generator-output=./build -f make
echo -e "prefix=$PREFIX\n" > ./config.mk

Makefile:

include config.mk
prefix ?= /usr/local
builddir=build/out
abs_builddir := $(abspath $(builddir))
all: config.mk
 $(MAKE) -C "./build" builddir="$(abs_builddir)"
binaries=$(prefix)/bin/foo $(prefix)/bin/bar
$(binaries): $(prefix)/bin/%: $(builddir)/%
 cp $< $@
install: $(binaries) $(directories)
# $(directories), uninstall, clean, .PHONY, etc.

build.gyp:

{
 'variables': {
 },
 'target_defaults': {
 // (...)
 },
 'targets': [
 {
 'target_name': 'foo',
 'type': 'executable',
 'defines': [],
 'include_dirs':[ 
 'src/headers'
 ],
 'sources': [ 
 'src/foo.c'
 ],
 'libraries': [
 '-lcrypto'
 ]
 },
 // (...)
 ]
}

И тогда все, что мне нужно сделать для установки, является классическим и неповторимым:

./configure --prefix="/home/me/local_builds"
make
make install

licensed under cc by-sa 3.0 with attribution.