1.获取 系统 位数
ARCH =x64
ifeq ($(shell getconf LONG_BIT), 32)
ARCH = x86
endif
all:
ifeq ($(ARCH),x64)
echo "x64"
else
echo "x86"
endif
备注 这里 的 标红部分不能有缩进,否则 会引起、
ifeq (x64, x64)
/bin/sh: -c: line 0: syntax error near unexpected token `x64,'
/bin/sh: -c: line 0: `ifeq (x64, x64)'
原因
Makefile中,当 ifeq, else 和 endif 没有缩进时,make会正确识别它们,将其作为分支选择的标识
当 ifeq, else 和 endif 有缩进时,make将它们当做普通的shell script
参考http://blog.csdn.net/yasi_xi/article/details/39155529 感谢博主
2. make 遍历 目录
有时候,在开发目录,依赖的 动态库 是 放在不同的 子目录下,防止混淆,便于管理,但发布到现网时,又希望这写依赖库能放到同一个 目录lib下,
在makefile 尾部 增加 下述,可以遍历 依赖库 子目录,并拷贝其 lib.so, 注,要求 所有的 依赖库子目录下都有 lib子目录
DEP_DIRS := $(shell ls ./dep/)
DEP_LIB_CP:
for dir_dep in $(DEP_DIRS);\
do \
cp -f ./dep/$$dir_dep/lib/lib* ./lib/; \
done \
3.make 传参数 和多个condition
make args=value
举例
ifeq ($(VV),suse32) echo $(VV) else ifeq ($(VV), suse64) echo $(VV) else echo $(VV) endif endif
make VV=suse32 输出suse32
make VV=suse64 输出suse64
make VV=other 输出other
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。