3

nmake を使用して、複数のソース ファイルを elf にコンパイルしています。ただし、次のような長いリストで .o ファイルを指定したくありません。

OBJS = file1.o file2.o file3.o

私が好むのは、現在のディレクトリ内のすべての .o ファイルを .elf の依存関係として指定するワイルドカードを使用することです。ただし、.o ファイルは、.cpp ファイルからコンパイルするまで存在しません。ワイルドカード展開を使用して cpp ファイルのリストを取得し、文字列置換を行って .cpp を .o に置き換える方法はありますか?

4

3 に答える 3

5

NMAKEでこれを行うための特にエレガントな方法はありません。可能であれば、代わりにGNU Makeを使用する必要があります。これはWindowsで利用可能であり、多くのタスクをはるかに簡単にします。

NMAKEを使用する必要がある場合は、これを自動的に行うために再帰makeを使用する必要があります。これは、NMAKEは前提条件リストのワイルドカードのみを展開するためです。ここで、別の同様の質問に答えてこれを行う方法を示しました。

お役に立てば幸いです。

于 2009-12-17T20:29:06.970 に答える
0

私は Unix の make と gmake に精通していますが、以下を使用することもできます。

OBJS = $(SOURCES:.cpp=.o)

(ソース ファイルが SOURCES にリストされていると仮定します)

于 2009-12-17T18:41:07.307 に答える
0

これがあなたを助けるかもしれない別の答えです。

別の解決策は、ラッパー バッチ ファイルを使用することです。この場合、次のように、「for」ループを使用してすべての .cpp ファイルのリストを作成します。

 del listoffiles.txt
 echo SOURCES= \ >> listoffiles.txt
 for %i in (*.dll) do @echo %i \ >>listoffiles.txt
 echo. >> listoffiles.txt

その後、nmake の !INCLUDE プリプロセッサ マクロでこれを使用することができます。

 !INCLUDE listoffiles.txt 

(これは最初から機能しないと確信していますが、一般的な考え方は明確なはずです)。

于 2009-12-17T18:53:32.210 に答える