8
  1. 警告を Makfile のエラーとして扱うことは可能ですか (したがって、Makefile が続行する前に終了します)

  2. さらに、どの警告がエラーになるかを除外することは可能ですか?

私のユースケース:--warn-undefined-variablesこれと組み合わせて使用​​したいので、変数が未定義のときに Makefile が終了します。これは非常に一般的なエラーの原因です。明らかに、これはエラーが発生しやすい/面倒なので、各変数を手動でチェックしたくありません。これについては何も見つかりませんでしたが、これは非常に重要な/基本的な機能です。

-Werror注:私のユースケースに適用できないgcc固有のコマンドはどれかを探しているわけではありません。

4

2 に答える 2

5

すべてのターゲットに依存関係を追加する準備ができている場合は、警告をエラーにすることができます。

以下は、エラーのあるメイク ファイルです (「SRC」ではなく「SRCS」)。

# Turn on the warning we want
MAKEFLAGS += --warn-undefined-variables

# Make sure MAKECMDGOALS is defined, so it doesn't cause an error itself
ifndef MAKECMDGOALS
MAKECMDGOALS = all
endif

SRC=hello.c

all: compile

# Fails if the Makefile contains any warnings.
# Run this Makefile with the same goals, but with the -n flag.
# Grep for warnings, and fail if any are found.
no-make-warnings:
    ! make -n $(MAKECMDGOALS) 2>&1 >/dev/null | grep warning

# Targets you want to check must depend on no-make-warnings
compile: no-make-warnings
    gcc -o hello $(SRCS)

実行すると、次のように表示されます。

$ make
! make -n all 2>&1 >/dev/null | grep warning
Makefile:17: warning: undefined variable `SRCS'
make: *** [no-make-warnings] Error 1

チェックしたいすべてのターゲットをターゲットに依存させるだけですno-make-warnings

誰かがそれを自動的に行う方法を知っている場合は、チャイムインしてください。

于 2015-04-22T14:29:56.630 に答える
3

make の標準バージョンは、探しているものをサポートしていません。ただし、ユースケースを満たす独自のバージョンの make を構築することは難しくありません。

make 3.82 のソース コードを見て、warn_undefinedvariable.h のマクロを確認してください。

214 /* Warn that NAME is an undefined variable.  */
215 
216 #define warn_undefined(n,l) do{\
217                               if (warn_undefined_variables_flag) \
218                                 error (reading_file, \
219                                        _("warning: undefined variable `%.*s'"), \
220                                 (int)(l), (n)); \
221                               }while(0)

私はこれを試していませんが、 に置き換えるだけで十分だと思いerrorますfatal

于 2012-06-03T02:52:44.640 に答える