gpt4 book ai didi

检查命令是否在 Makefile 中不返回任何内容

转载 作者:可可西里 更新时间:2023-11-01 11:51:22 25 4
gpt4 key购买 nike

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

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

其中 ${CXX}gccclang。对于 x86_64 机器,这将返回一个非空字符串。对于 32 位机器,比如 Raspberry Pi,这将为空。

如何区分这两种情况?

我这样做了:

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} 也可以,但是 < strong>$CXX 没有)。要捕获 shell 输出,您需要使用 $(shell command)。因此

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

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


最后确保您没有混淆 ifneqifeq

ifneq ($(CXXARCH),)

意思是“如果 $(CXXARCH) 扩展为一个空字符串,那么......”

关于检查命令是否在 Makefile 中不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53969400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com