OhJ*_*eez 5 install makefile build gyp
我正在使用gyp为我的项目生成makefile.Makefile工作,导致工作二进制文件弹出"out"目录,所有这些都很花哨.
但是,我希望我的makefile有一些"标准"动作/目标,即"安装","卸载"和"干净".
我已经为.gyp文件添加了"安装"目标,但我怀疑这是否是正确的方法,特别是似乎没有办法在make中使用gyp从"all"中排除"安装"目标.
我也想知道是否有工具为gyp生成./configure文件,或者是否应该由开发人员编写并且只运行带有一些所需选项的gyp.
将这些目标("install"...)添加到由gyp生成的makefile的正确方法是什么?是否可以这样制作,一旦指定,这些操作也可以与其他构建系统一起使用?(忍者等)
我发现最好的方法是在项目目录的子目录中使用 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)
Run Code Online (Sandbox Code Playgroud)
。/配置:
#!/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
Run Code Online (Sandbox Code Playgroud)
生成文件:
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.
Run Code Online (Sandbox Code Playgroud)
构建.gyp:
{
'variables': {
},
'target_defaults': {
// (...)
},
'targets': [
{
'target_name': 'foo',
'type': 'executable',
'defines': [],
'include_dirs':[
'src/headers'
],
'sources': [
'src/foo.c'
],
'libraries': [
'-lcrypto'
]
},
// (...)
]
}
Run Code Online (Sandbox Code Playgroud)
然后,我需要做的就是经典且独一无二的安装:
./configure --prefix="/home/me/local_builds"
make
make install
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
738 次 |
| 最近记录: |