问题:我有一个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>
...
因此,这里可能发生的是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
,则也许可以做到这一点。