4

nmakeを使用して、makefileで現在のディレクトリ内のすべての.cppファイルを個別に指定せずに自動的にビルドすることは可能ですか?

したがって、次のようなものの代わりに:

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

作成する各objを指定する必要はありません。これはできますか?

4

5 に答える 5

1

次のようなルールを使用できます。

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

.cこれにより、すべてのファイルが検索およびコンパイルsrc\mystuffされ、オブジェクト ファイルが に配置されtmp\src\mystuffます。あなたの場合の代わり.cppに。.c

2 行目の最初の文字は、スペースではなくタブにする必要があることに注意してください。

また、$(CC)は nmake によって に事前定義されており、必要に応じて、cl必要なコンパイラ フラグを$(CFLAGS)追加したり、ルールにハードコードしたり、別の変数をそこに追加したりできます。

于 2009-05-08T20:41:40.170 に答える
1
.cpp.obj:
    $(CC) $(CFLAGS) $*.cpp

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

于 2009-05-08T20:46:36.150 に答える
0

1 つの可能性は、make をスクリプトでラップすることです。

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

于 2009-06-06T02:56:40.083 に答える
0

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---

ほとんどの人はbashを使用して を作成しないsources.makと思いますが、アイデアはわかります。

于 2011-01-07T15:57:09.390 に答える