2009-05-08 10 views
1

nmakeを使用すると、makefileを個別に指定することなく、現在のディレクトリにすべての.cppファイルを自動的に構築することは可能ですか?NMAKEを使用して、ディレクトリ内のすべてのソースを作成しますか?

ので、代わりのようなもので:

O = $(OBJ_DIR)/main.obj 
{$(SOURCE_DIR)}.cpp{$(OBJ_DIR)}.obj: 
    ---COMPILE $< HERE--- 

私が作るために、各OBJを指定することを避けるためにしたいと思います。これはできますか?

答えて

-2

これはGNU make(とIIRCではWindows上で実行できる)のワイルドカードで行うことができると思います。それ以外には、私は残念ですが、私はnmakeを知らないのです。

{src\mystuff}.c{tmp\src\mystuff}.obj:: 
    $(CC) /nologo $(CFLAGS) /c /Fotmp\src\mystuff\ $< 

見つけるとsrc\mystuff内のすべての.cファイルをコンパイルし、tmp\src\mystuffにオブジェクトファイルを置く:

0

は、次のようなルールを使用することができます。あなたの場合は.cpp.cに置き換えてください。

2行目の最初の文字は、スペースではなくタブでなければならないことに注意してください。

また、nmakeによってclに定義されています。必要なコンパイラフラグを$(CFLAGS)に追加し、それらをルールでハードコードしたり、そこに別の変数を追加したりすることができます。

3
.cpp.obj: 
    $(CC) $(CFLAGS) $*.cpp 

が自動的に.cppのファイルから.OBJの依存関係を解決するデフォルトのルールです...

+1

まあ、いいえ。どのようにしてそれを行うのか説明するだけで、完了させることはありません。 – reinierpost

+0

@reinierpostはいあなたは技術的に正しいです。それはmakefile全体に当てはまります。依存関係を解決し、出力を生成するために必要なアクションについて説明します。 –

+0

さて、私は、あなたが求めるものとは異なる質問に答えると思いますが、他の人が同じ答えを提供しているので、私は間違っていると思います。 – reinierpost

0

一つの可能​​性は、スクリプト内でメイクをラップすることです。

forループを使用するか、各.cppファイルでmakeを呼び出すか、cppファイルのリストを作成し、それをmakefileのパラメータとして使用します。

1

nmakefile前処理中にシェルコマンドを実行し、次に出力を!includeにすることができます。もちろん、出力はnmake形式である必要があります。何かのように:

!if [bash -c "echo O = *.cpp" >sources.mak] 
!error Failed to generate source list 
!endif 
!include sources.mak 

all: $(O:.cpp=.obj) 

.cpp.obj: 
    ---COMPILE $< HERE--- 

私はほとんどの人がsources.makを作成するためにbashのを使用していないだろうと思われるが、あなたのアイデアを得ます。

関連する問題