nmakeを使用して、makefileで現在のディレクトリ内のすべての.cppファイルを個別に指定せずに自動的にビルドすることは可能ですか?
したがって、次のようなものの代わりに:
O = $(OBJ_DIR)/main.obj
{$(SOURCE_DIR)}.cpp{$(OBJ_DIR)}.obj:
---COMPILE $< HERE---
作成する各objを指定する必要はありません。これはできますか?
nmakeを使用して、makefileで現在のディレクトリ内のすべての.cppファイルを個別に指定せずに自動的にビルドすることは可能ですか?
したがって、次のようなものの代わりに:
O = $(OBJ_DIR)/main.obj
{$(SOURCE_DIR)}.cpp{$(OBJ_DIR)}.obj:
---COMPILE $< HERE---
作成する各objを指定する必要はありません。これはできますか?
次のようなルールを使用できます。
{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)
追加したり、ルールにハードコードしたり、別の変数をそこに追加したりできます。
.cpp.obj:
$(CC) $(CFLAGS) $*.cpp
.cpp ファイルから .obj の依存関係を自動的に解決するデフォルトのルールです...
1 つの可能性は、make をスクリプトでラップすることです。
for ループを使用して各 .cpp ファイルで make を呼び出すか、cpp ファイルのリストを作成してそれを makefile のパラメーターとして使用します。
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
と思いますが、アイデアはわかります。