如何在“无污染”环境下的CMake中执行自定义命令?

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

问题:我有一个add_custom_command,它调用一个外部工具,该工具通过gmake来构建一些外部库。 gmake输出将记录到日志文件中。

CMake使用Unix Makefile作为生成器目标,并设置$(VERBOSE).SILENT。该选项以某种方式被gmake继承(可能通过MAKEFLAGS),该工具是从从add_custom_command生成的顶级make文件中执行的工具调用的。结果,日志文件不包含任何有用的信息。

这不是理想的-二手CMake生成器及其内部选件无意间泄漏到了我的外部工具中。有什么方法可以防止这种情况?

这里是CMakeLists中的代码,可以更好地说明问题:

...
add_custom_command(OUTPUT "<some target name>"
                   COMMAND ${BUILDTOOL_COMMAND} # i.e. buildtool <buildtool args>
                   VERBATIM)
...

CMake为其生成带有以下内容的build.make文件:

...
# Suppress display of executed commands.
$(VERBOSE).SILENT:

...

<some target name>: 
    buildtool <buildtool args>
...
makefile cmake gnu-make
1个回答
0
投票

因此,这里可能发生的是VERBOSE变量的值正在导出到孩子的环境中,包括您的“ buildtool”(无论是什么)。而且,由buildtool also调用的makefile使用相同的变量来控制详细输出,因此CMake中VERBOSE变量的设置导致在调用buildtool的makefile中具有相同的冗长设置。

我对“ buildtool”一无所知,所以我不知道您可能有什么资源来解决此问题。

如果直接调用make,则可以在命令行上覆盖它,例如:

add_custom_command(OUTPUT "<some target name>"
                   COMMAND make VERBOSE=1
                   VERBATIM)

无论环境设置如何都强制VERBOSE=1

您必须弄清楚如何用我期望的“ buildtool”来做类似的事情。如果“ buildtool”将变量设置转发到make,则也许可以做到这一点。

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