Patsubst ne peut gérer que des motifs avec un caractère générique, malheureusement. De plus, vous essayez de séparer les noms de chemin d'accès de manière inhabituelle au niveau du fichier. Cela signifie que tant que vous ne connaissez ni le préfixe ni les parties postfixes du /src/
dans vos chaînes, vous n'avez pas de chance car vous ne pouvez jamais dire 'remplacer le préfixe inconnu et conserver le postfixe inconnu' (ou l'inverse). La solution habituelle est de « connaître » le préfixe:
OUT_DIR=Out/
SRC_PATH := ../../../Client2.4/Client/src
SRC=../../../Client2.4/Client/src/BrokerModule/BrokerApp.cpp \
../../../Client2.4/Client/src/CommandMsgManager/CConfigModuleInfo.cpp
OBJ:= $(patsubst $(SRC_PATH)/%,${OUT_DIR}%,$(SRC))
$(info $(OBJ))
Une autre solution consiste à utiliser par exemple la bibliothèque GNUmake table toolkit des fonctions make (encore bêta, mais votre problème peut être résolu):
include gmtt.mk
OUT_DIR=Out
SRC=../../../Client2.4/Client/src/BrokerModule/BrokerApp.cpp \
../../../Client5.6/Client/src/CommandMsgManager/CConfigModuleInfo.cpp
strip-till-last-src = src/$(call implode,$(call down-to,src/,$(call explode,/,$1)))
OBJ:= $(foreach a-path,$(SRC),$(OUT_DIR)/$(call strip-till-last-src,$(a-path)))
$(info $(OBJ))
Alors vous avez probablement ne pas utiliser exactement ce que propose CWLiu. Vérifiez à nouveau votre syntaxe et les définitions de 'src',' OUT_DIR' et 'SRC'. –
Cela fonctionne déjà ici, ne devrait pas poser de problème avec ma réponse. – CWLiu
Désolé, ça marche. J'ai fait une erreur. Merci CWLiu. –