c – Makefile中的条件表达式

前端之家收集整理的这篇文章主要介绍了c – Makefile中的条件表达式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道你可以在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个视图,我认为使用c的人可能会知道答案,我知道这不是严格的问题(虽然我打算用它编译c)

编辑:看起来有一个if函数使用这种语法
$(如果条件,那么部分[,else-part])
我对它的工作方式仍然有点困惑

解决方法

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

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

通常,过滤器和过滤器功能用于此目的.不幸的是,最简单的方法就是以这种方式使用它们,以获得“不相等”的结果;换句话说,使用这些函数,如果字符串不是gcc,则准确生成非空字符串(true)要简单得多,如果值为gcc则为空字符串(false).例如:

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

猜你在找的C&C++相关文章