ccache 不支持某些编译器选项(例如 --coverage)。如果存在不受支持的编译器选项,它会编译但不使用缓存。
启用 ccache 的方法不止一种(修改 PATH,使用 CC/CXX 环境变量)。
我想检测编译器是否使用 ccache,如果是,则禁用不受支持的编译器选项。
我想出的最好的是这样的:
CC = $(shell which $(CC))
ifeq (,$(findstring ccache,$(CC)))
任何想法如何改善这一点?
这可能是一个更优雅的解决方案:
ifeq ($(shell readlink -f `which $(CC)`),$(shell which ccache))
echo "Using ccache"
else
echo "Not using ccache"
endif
根据 ccache 的配置方式,Smani 的解决方案可能不起作用(例如,在 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 已启用,而不是省略 --coverage 标志,您可以在它前面加上--ccache-skip。
另请注意,即使 ccache 在路径中,它也可能被 CCACHE_DISABLE 环境变量或 ccache.conf 文件禁用。