检查命令是否在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)不扩展为空字符串,则…”

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...