Lin*_*eak 3 conditional makefile gnu-make bsdmake
从我的角度来看,我有一个相当复杂的Makefile。
这主要是因为我想在那里添加颜色和其他不必要的东西。
无论如何,我可以跳进我的问题:
除了Linux,我最近还支持* BSD,因此我需要检查在多个地方使用的平台。Makefile中可以进行条件变量赋值吗?就像是:
platform := [ $$(uname) = Linux ] && echo Linux || echo BSD or other
Run Code Online (Sandbox Code Playgroud)
当然这是行不通的,但是希望您能理解我的意思。
我需要一个可以与BSD make和GNU 一起使用的解决方案make。
该!=外壳赋值运算符显然都支持BSD和GNU make:
platform_id != uname -s
platform != if [ $(platform_id) = Linux ] || \
[ $(platform_id) = FreeBSD ] || \
[ $(platform_id) = OpenBSD ] || \
[ $(platform_id) = NetBSD ]; then \
echo $(platform_id); \
else \
echo Unrecognized; \
fi
Run Code Online (Sandbox Code Playgroud)
请注意,赋值实际上是由Shell评估的:赋值给make变量而不是Shell命令的是评估的结果。
一种可能性是使用ifGNU make函数:
platform := $(if $(patsubst Linux,,$(shell uname -s)),BSD or other,Linux)
Run Code Online (Sandbox Code Playgroud)
另一个是仅依赖于shell条件:
platform := $(shell [ $$(uname) = Linux ] && echo Linux || echo BSD or other)
Run Code Online (Sandbox Code Playgroud)
在GNU化妆条件句也可用于:
ifeq ($(shell uname -s),Linux)
platform := Linux
else
platform := BSD or other
endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
766 次 |
| 最近记录: |