如果编译器正在使用ccache,请检测

问题描述 投票:0回答:2

ccache不支持某些编译器选项(例如--coverage)。如果存在不受支持的编译器选项,它将编译但不使用缓存。

有多种方式启用ccache(使用CC / CXX环境变​​量修改PATH)。

我想检测编译器是否使用ccache,如果是,请禁用不支持的编译器选项。

我想出的最好的方法是这样的:

CC = $(shell which $(CC))
ifeq (,$(findstring ccache,$(CC)))

任何想法如何改善这一点?

makefile autotools ccache
2个回答
2
投票

这可能是一个更优雅的解决方案:

ifeq ($(shell readlink -f `which $(CC)`),$(shell which ccache))
    echo "Using ccache"
else
    echo "Not using ccache"
endif

0
投票

Smani的解决方案可能不起作用,这取决于配置ccache的方式(例如,在RedHat Linux的ccache 3.3.4中,/ usr / lib64 / ccache /中的编译器符号链接指向/ usr / bin / ccache,但是which ccache返回/ bin / ccache)。

此解决方案不在乎ccache的位置,即使将ccache用作前缀也可以使用:

ifeq ($(shell $(CC) -xc -c - --ccache-skip </dev/null 2>&1),)
    echo "Using ccache"
else
    echo "Not using ccache"
endif

这通过编译一个空文件并检查编译器是否知道ccache --ccache-skip标志来工作。

请注意,一旦知道启用了ccache,您可以在--ccache-skip之前加上它,而不是省略--coverage标志。

还要注意,即使ccache在路径中,也可能会被CCACHE_DISABLE环境变量或ccache.conf文件禁用。

© www.soinside.com 2019 - 2024. All rights reserved.