2010-06-21 19 views

Répondre

5

Pour juste ajouter quelque chose à une liste d'espace séparés les éléments que vous pouvez utiliser:

program_OBJS := $(foreach program,$(program_SRCS),$(program).o) 

Pour utiliser la méthode de substitution (comme vous montrer dans votre question):

program_OBJS := $(program_SRCS:.cpp=.cpp.o) 

mais pour que la liste doit contenir les cpp suffit, ou les substitutions ne se produiront pas.

+0

Pourquoi l'espace est-il important? –

+0

Je pensais que $ (foreach) 'a littéralement dépensé le troisième argument et concaténé les résultats. Je viens de le tester et il ajoute automatiquement un espace si omis, donc ce n'est pas nécessaire. (Je vais supprimer la note de ma réponse et mettre à jour mes propres Makefiles ...;)) – Veger

1

Juste une supposition program_OBJS := ${program_SRCS:.cpp=.cpp.o}

8

GNU make a addsuffix fonction

+0

+1 Est-ce que cela fonctionne dans d'autres versions de make, ou simplement gnu make? –

+1

@Robert: Just make GNU. Si vous voulez rester portable avec vos Makefiles, le mieux est d'écrire des makefiles POSIX, comme spécifié ici: http://pubs.opengroup.org/onlinepubs/009695399/utilities/make.html – Jens

5

Shorter alternatif, en utilisant une substitution de motif: program_OBJS := ${program_SRCS:%=%.o}

3

Une autre façon de travailler indépendamment de l'extension: ${program_SRCS:=.o}

1

Que diriez-vous ceci:

STRING1:="foo" 
STRING2:="bar" 

STRING1:=$(STRING1)$(STRING2) 

Bien évidemment, vous pouvez enregistrer le résultat dans une nouvelle variable.