1

msbuild のExcludeフィルタのようなものを探しているのですが、nmake で処理される makefile に入れたいのです。

それは可能ですか?

このマクロを定義するメイクファイルがあるとします。

SOURCES=xxx.c  yyy.c  zzz.c

そして私はそれを呼び出すnmake OLD=xxx.c NEW=bbb.c

...次のような値を持つマクロをメイクファイル内に作成できますか?

yyy.c zzz.c  bbb.c 

...基本的に xxx.c を bbb.c に置き換えますか?

ファイルは任意の順序で表示できます。


nmake マクロで可能な文字列置換がマクロの評価に使用できる場合、これは非常に簡単です。

言い換えれば、私はできる

sources=xxx.c yyy.c zzz.c
objs=$(sources:.c=.o)

$(objs) の値は

xxx.o yyy.o zzz.o

ただし、nmake では、その置換のどちらの引数の値にもマクロを使用できません。これはできない:

new=.o
sources=xxx.c yyy.c zzz.c
objs=$(sources:.c=$(new))
4

1 に答える 1

1

やりたいことを正確に行う方法は見つかりませんでしたが、回避策を見つけました。

これには、nmake が動的に作成し、コマンド ブロックで使用するファイルである「インライン ファイル」と呼ばれるものが含まれます。私の場合、「インライン ファイル」トリックを使用して .cmd ファイルを作成し、実行しました。.cmd ファイルは、包含/除外ロジックを実行し、ソース ファイルのマッサージされたリストに対してコンパイラを実行しました。

このように見えます。

  CSOURCE=Fribble.c Zambda.c Twoolie.c
         ....
  target :
          <<tmp-build-file.cmd  $(CSOURCE)
      SETLOCAL ENABLEDELAYEDEXPANSION
      for %%I in (%*) do if NOT %%I == $(EXC) (
         set filesToBuild=!filesToBuild! %%I
      )
      $(CC) $(INC) !filesToBuild!
      ENDLOCAL
  <<

それを呼び出すには、次のことができます。

nmake INC=AdditionalFile.c  EXC=Zambda.c  target

...そしてそれは正しいことをします: Fribble.c Twoolie.c と AdditionalFile.c をコンパイルしますが、 Zambda.c はコンパイルしません。

于 2010-05-10T21:34:05.077 に答える