Makefile 检测编译器是否正在使用ccache

Makefile 检测编译器是否正在使用ccache,makefile,autotools,ccache,Makefile,Autotools,Ccache,ccache不支持某些编译器选项(例如--coverage)。如果存在不受支持的编译器选项,则会进行编译,但不会使用缓存 有多种方法可以启用ccache(使用CC/CXX环境变量修改路径) 我想检测编译器是否使用ccache,如果是,则禁用不受支持的编译器选项 我想到的最好的办法是: CC = $(shell which $(CC)) ifeq (,$(findstring ccache,$(CC))) 有什么改进方法吗?这可能是一个更优雅的解决方案: ifeq ($(shell readli

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

有多种方法可以启用ccache(使用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

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

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

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

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

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

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

Smani的解决方案可能不起作用,这取决于ccache的配置方式(例如,在RedHat Linux的ccache 3.3.4中,/usr/lib64/ccache/中的编译器符号链接指向/usr/bin/ccache,但
哪个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
ifeq($(shell$(CC)-xc-c----ccache skip&1),)
echo“使用ccache”
其他的
echo“不使用ccache”
恩迪夫
这是通过编译一个空文件并检查编译器是否知道ccache--ccache skip标志来实现的

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


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

Smani的解决方案可能无法工作,具体取决于ccache在路径中的配置方式(例如,在RedHat Linux的ccache 3.3.4中,/usr/lib64/ccache/中的编译器符号链接指向/usr/bin/ccache,但
哪个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
ifeq($(shell$(CC)-xc-c----ccache skip&1),)
echo“使用ccache”
其他的
echo“不使用ccache”
恩迪夫
这是通过编译一个空文件并检查编译器是否知道ccache--ccache skip标志来实现的

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


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

Smani的解决方案可能无法工作,具体取决于ccache在路径中的配置方式(例如,在RedHat Linux的ccache 3.3.4中,/usr/lib64/ccache/中的编译器符号链接指向/usr/bin/ccache,但
哪个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
ifeq($(shell$(CC)-xc-c----ccache skip&1),)
echo“使用ccache”
其他的
echo“不使用ccache”
恩迪夫
这是通过编译一个空文件并检查编译器是否知道ccache--ccache skip标志来实现的

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


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

Smani的解决方案可能无法工作,具体取决于ccache在路径中的配置方式(例如,在RedHat Linux的ccache 3.3.4中,/usr/lib64/ccache/中的编译器符号链接指向/usr/bin/ccache,但
哪个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
ifeq($(shell$(CC)-xc-c----ccache skip&1),)
echo“使用ccache”
其他的
echo“不使用ccache”
恩迪夫
这是通过编译一个空文件并检查编译器是否知道ccache--ccache skip标志来实现的

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

还请注意,即使ccache在路径中,它也可能被ccache_DISABLE环境变量或ccache.conf文件禁用