微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检查命令是否在Makefile中什么都不返回

对于C库,由于内存问题,我需要检查当前的编译器是否适用于x86_64.我发现的命令完全符合我的要求:

CXXARCH:=$(${CXX} -dumpmachine | grep -i 'x86_64')

其中${CXX}是gcc或clang.对于x86_64机器,这将返回一个非空字符串.对于RaspBerry Pi这样的32位计算机,该字段将为空.

如何区分这两种情况?

我这样做:

ifneq (${CXXARCH},)
MAGICVAR:=-DMY_DEFINE
endif

使用$(info)打印,我确保在RaspBerry Pi中不满足此条件,应该这样做,因为命令clang-6.0 -dumpmachine返回:armv7l-unkNown-linux-gnueabihf.那么为什么不执行此条件呢?我究竟做错了什么?

解决方法:

语法

$(${CXX} -dumpmachine | grep -i 'x86_64')

是Shell语法.它无法满足您在Makefile中的要求.要在Makefile中扩展CXX变量,首选语法是使用$(CXX)(虽然${CXX}也可以,但是$CXX不能).要捕获shell输出,您需要使用$(shell命令).从而

CXXARCH:=$(shell $(CXX) -dumpmachine | grep -i 'x86_64')
ifneq ($(CXXARCH),)
MAGICVAR:=-DMY_DEFINE
endif

请注意,编译器目标与结果程序中的“内存问题”无关.您可以使用x86_64-linux-gnu-gcc编译32位程序(-m32),并获得与32位编译器相同的“相同内存问题”.

最后,确保您没有混淆ifneq和ifeq.

ifneq ($(CXXARCH),)

表示“如果$(CXXARCH)不扩展为空字符串,则…”

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐