50

我看到这是同一个问题

在执行之前制作 cmake 打印命令

但这个答案对我不起作用。我猜这个答案只适用于cmake。没有 cmake,哪些选项有效?

注意尝试了这些

make VERBOSE=1 target
make target VERBOSE=1
VERBOSE=1 make target
make V=1 target
make target V=1
V=1 make target
make -V target
make -v target

他们都没有工作。

make -v 返回

GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-pc-linux-gnu
4

4 回答 4

125

默认情况下,make在执行之前打印每个命令。可以通过以下机制之一抑制此打印:

  • 根据具体情况,@在命令开头添加
  • 全局,通过添加 .SILENT 内置目标。
  • 在制作过程中的某个地方,通过调用带有标志之一的子制作-s--silent或者--quiet$(MAKE) --silent -C someDir例如,例如。从那一刻起,命令回显在子制作中被抑制。

如果您的 makefile 没有打印命令,那么它可能使用了这三种机制之一,您必须实际检查 makefile 以确定是哪一种。

作为避免这些回声抑制机制的解决方法,您可以重新定义要用于使用调试模式的 shell,例如make SHELL="/bin/bash -x" target. 其他 shell 也有类似的选项。使用这种方法,它不是make打印命令,而是打印 shell 本身。

如果您使用标志-n--just-print,回声抑制机制将被忽略,您将始终看到所有make认为应该执行的命令——但它们实际上并没有被执行,只是被打印出来。这可能是确定您实际期望看到的内容的好方法。

VERBOSE变量对 没有标准含义make,但前提是您的 makefile 解释了它。

于 2012-06-13T12:45:00.000 回答
2

对于我的 make 版本,我找到了这两个参数-n并提供-d了帮助。

GNU Make 3.80 版权所有 (C) 2002 Free Software Foundation, Inc

  -d                          Print lots of debugging information.
  -n, --just-print, --dry-run, --recon
                              Don't actually run any commands; just print them.

当包含一堆 makefile 片段时,如果没有这个关键调试标志,行号就没有意义。

CreateProcess(....exe,...)
Reading makefile `../../../../build/Makefile.options' (search path) (don't care) (no ~ expansion)...
Makefile:361: Extraneous text after `else' directive
Makefile:368: Extraneous text after `else' directive
Makefile:368: *** only one `else' per conditional.  Stop.
于 2021-01-11T22:54:33.670 回答
0

我认为这就是你想要的:make MAKE_VERBOSE=1 target

于 2013-01-29T20:57:12.850 回答
0

在我的情况下,我能够通过在我的 make 文件顶部设置以下变量来抑制输出中的命令

# Use `make V=1` to print commands.
$(V).SILENT:

在你的文件顶部添加上面的行,当你调用任何目标时它不会打印

前 :

muhasan@admins-MacBook-Pro fx.identitymanagement % make dockerstatus
cd identity.API/ && docker-compose ps 
        Name                       Command              State           Ports         
--------------------------------------------------------------------------------------
identityapi_backend_1   dotnet Identity.API.dll         Up      0.0.0.0:5000->80/tcp  
identityapi_db_1        docker-entrypoint.sh postgres   Up      0.0.0.0:5432->5432/tcp
muhasan@admins-MacBook-Pro fx.identitymanagement % 

后 :

muhasan@admins-MacBook-Pro fx.identitymanagement % make dockerstatus
        Name                       Command              State           Ports         
--------------------------------------------------------------------------------------
identityapi_backend_1   dotnet Identity.API.dll         Up      0.0.0.0:5000->80/tcp  
identityapi_db_1        docker-entrypoint.sh postgres   Up      0.0.0.0:5432->5432/tcp
muhasan@admins-MacBook-Pro fx.identitymanagement % 
 

我的 Makefile

# Use `make V=1` to print commands.
$(V).SILENT:
Path = identity.API
builddocker:
    cd devops && cp -rv Dockerfile docker-compose.yml ../${Path}/ && cd ..
installdocker:
    cd ${Path}/ && docker-compose up -d
dockerstatus:
    cd ${Path}/ && docker-compose ps    
于 2022-02-16T08:56:15.483 回答