gpt4 book ai didi

c++ - Makefile 中的条件表达式

转载 作者:可可西里 更新时间:2023-11-01 16:32:39 27 4
gpt4 key购买 nike

我知道您可以在 makefile 中使用如下 if 语句:

foo: $(objects)
ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif

有没有办法像三元类型运算符那样进行条件替换。

(condition?$(CC):$(CC2)) -o foo $(objects) $(libs_for_gcc)  

如果没有什么是实现该示例的最惯用的方法

我添加了 c++ 标签,因为这个问题只有 7 个 View ,我认为使用 c++ 的人可能知道答案,我知道这不是一个严格的 c++ 问题(尽管我打算用它编译 c++ )

编辑: 看起来有一个使用此语法的 if 函数
$(if condition,then-part[,else-part])
不过,我对它的工作原理还是有点困惑

最佳答案

正如您所发现的,$(if ...) 函数可以用作三元运算符。真正的问题是,条件(真与假)在 GNU make 中是如何工作的?在 GNU make 中,任何需要条件( bool 表达式)的地方,空字符串都被认为是 false,任何其他值都被认为是 true。

因此,要测试 $(CC) 是否是字符串 gcc,您需要使用一个函数,当它不是时返回一个空值, 和一个非空值。

通常 filterfilter-out 函数用于此。不幸的是,最容易以得到“不相等”结果的方式使用它们;换句话说,如果字符串是 not gcc,则使用这些函数可以更简单地准确生成非空字符串 (true),如果是,则生成空字符串 (false)值 gcc。例如:

$(if $(filter-out gcc,$(CC)),$(info is not gcc),$(info is gcc))

关于c++ - Makefile 中的条件表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17979926/

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