5

我正在使用 gyp 为我的项目生成 makefile。Makefiles 工作,导致工作二进制文件在“out”目录中弹出,这里一切都很花哨。

但是,我希望我的 makefile 有一些“标准”操作/目标,即“安装”“卸载”和“清理”。

我已经在 .gyp 文件中添加了“安装”目标,但我怀疑这是否是正确的做法,尤其是在使用 gyp 的 make 中似乎无法从“全部”中排除“安装”目标。

我还想知道是否有一个工具可以为 gyp 生成 ./configure 文件,或者这些文件是否应该由开发人员编写并且只运行带有一些需要选项的 gyp。

将这些目标(“安装”...)添加到 gyp 生成的 makefile 的正确方法是什么?能否以这样的方式制作,一旦指定这些操作也可以与其他构建系统一起使用?(忍者等)

4

1 回答 1

0

我发现最好的方法是在项目目录的子目录中生成带有 gyp 的 makefile,然后手动编写带有“install”、“clean”等目标的 makefile,这些目标执行由 gyp 生成的 Makefile。

为了确保使用正确的参数调用 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

生成文件:

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.

构建.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
于 2015-06-01T10:25:54.770 回答