我有一个makefile
我想在 linux (debian/Ubuntu) 和 Windows/Cygwin 上运行的。
我需要根据运行环境做一些稍微不同的事情,我得到了以下代码,它应该在变量中存储一个字符串,foo
如果操作系统是 linux,否则foo.exe
:
EXECUTABLE_FILENAME=bash -c 'os_type=`uname`; if [ $os_type == "Linux" ]; then echo "foo"; else echo "foo.exe"; fi'
然后我想在另一个变量中使用该变量,例如:
GODEPBUILD=$(godep go build -o $(EXECUTABLE_FILENAME))
前一个有/没有评估通过$(...some stuff...)
(见下文我为完成这项工作所做的所有测试)
最后,我想在任务中的其他地方“运行”该命令makefile
,例如:
build-all:
@echo -e "build my project"
$(GODEPBUILD)
我尝试了许多不同的组合
- 有/无
$(some stuff here)
, - 带/不带单引号
'
, - 带/不带 bash "`"
- 带/不带包装
bash -c '...some commands here...'
但我收到各种 bash 错误,例如:
invalid option -- 'c'
go
编译器抱怨此消息为EXECUTABLE_FILENAME
空:flag needs an argument: -o
- 无声地忽略
$(GODEPBUILD)
(我相信因为它以某种方式计算为一个空命令)
我正在执行这一系列步骤,因为我需要将go
工具链的许多命令包装到另一个名为godep
. 我go
在开头定义了工具链的许多不同“命令”,makefile
例如:
GODEP_VERSION=godep version
GODEPRESTORE=godep restore
GODEPTEST=godep go test -v
GOCLEAN=go clean
makefile
我在任务中调用这些“命令” $(GODEP_VERSION)
(或者-$(GODEP_VERSION)
如果我需要忽略stderr
),对我来说,以类似的方式添加“构建命令”是件好事。
make
版本是:
- 4.1 在 Ubuntu 上
- 4.2.1 在 Cygwin 上
这件事有可能吗?
我怎样才能实现不同“小脚本”的这种组合来构建make
应该在任务中运行的最终命令?