何か間違ったことをしているのかもしれませんが、makefile がこのようになっている場合、 makeは依存関係のタイムスタンプのチェックを拒否します。
# This makefile won't update the objects if you modify the .cpp files
# and it will only create them if they do not exist.
CC=g++
FL=-g
OBJECTD=../obj
SOURCED=../src
# Get all .cpp files in ../src
SOURCES=$(wildcard *.cpp)
# Convert .cpp to .o then add ../obj in front
OBJECTS=$(addprefix $(OBJECTD)/,$(patsubst %.cpp,%.o,$(SOURCES)))
# You sir must execute yourself whether you like it or not
.PHONY:all
all:$(OBJECTS)
@echo : Leaving `src`
# This wont work as expected ...
# @echo : Compiling $(notdir $(patsubst %.o,%.cpp,$@))
# echoes Compiling logger.cpp
# But $(notdir $(patsubst %.o,%.cpp,$@)) will not be parsed
# correctly
$(OBJECTS):$(notdir $(patsubst %.o,%.cpp,$@))
@echo : Compiling $(notdir $(patsubst %.o,%.cpp,$@))
@$(CC) $(FL) -c $(notdir $(patsubst %.o,%.cpp,$@)) -o $@
私はそれが受け入れられないと信じています $(notdir $(patsubst %.o,%.cpp,$@))
ドキュメントにそのように記載されていても
複数のターゲットを持つパターン ルール (「パターン ルールの紹介」を参照) では、「$@」は、ルールのレシピを実行させたターゲットの名前です。
各ファイルを個別にコンパイルすると、正常に動作します。
例えば:
../obj/logger.o:logger.cpp
@echo : Compiling $<
@$(CC) $(FL) -c $< -o $@
+------------+
:エクストラ nfo :
+------------+
私が達成しようとしているのは、現在のディレクトリからソースを読み取り、変更されているかどうかを確認し、オブジェクトを現在のディレクトリではなく ../obj に配置しながらコンパイルに進むことです。
これは ../src にある makefile です。親ディレクトリにリンクするための別のファイルもあります。
取り組みたい構造のグラフィカル表現
+--- Parent Directory ------+
| | | |
| | | |
bin obj inc src