7
votes

GNU marque: comment concatez deux cordes

Compte tenu de la ligne:

program_OBJS := ${program_SRCS:.cpp=.o}


0 commentaires

6 Réponses :


1
votes

juste une hypothèse programme_objs: = $ {programme_srcs: .cpp.o}


0 commentaires

7
votes

à juste em> appendez quelque chose à une liste d'éléments séparés de l'espace que vous pouvez utiliser:

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


1 commentaires

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



9
votes

gnu make a AddSuffix fonction


2 commentaires

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


@Robert: juste gnu faire. Si vous souhaitez rester portable avec vos maquillages, le meilleur pari consiste à écrire des makfiles POSIX, comme spécifié ici: pubs.opengroup.org/onlinepubs/009695399/utilities/make.html



7
votes

alternative plus courte, en utilisant une substitution de modèle: programme_objs: = $ {programme_srcs:% =%. o}


0 commentaires

3
votes

Un autre moyen de travailler, quelle que soit l'extension: $ {program_srcs: =. o}


0 commentaires

6
votes

Que diriez-vous:

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

STRING1:=$(STRING1)$(STRING2)


2 commentaires

Lorsque j'imprime le résultat de cela, je reçois "FOO" "bar" à la suite d'une concaténation. Comment puis-je supprimer les citations indésirables?


foo: = "bar" foo: = $ (Patsubst "%",%, $ (foo))