fond.
%define LIST a %define LIST %LIST b
6 Réponses :
Vous devez avoir au moins une partie de la valeur de la première ligne, i.e.:
%define DOSOMETHING rm file1; rm file2; rm file3
La solution ci-dessus ne fonctionne pas pour moi, possible pourrait fonctionner pour d'autres versions de RPMBuild. Je reçois une erreur: Erreur: Line 31: Balise inconnue: B \ édité la question à la réfléchir.
Puisque vous avez expliqué votre objectif un peu plus, essayons une approche différente. Essayez ceci dans votre fichier de spécifications: et ceci dans le fichier source1 (dans ce cas, flist): p> J'ai testé cela avec RPM 4.4.6 Comme c'est la version la plus ancienne disponible pour moi pour le moment. P> P>
Cela ne fonctionne pas sur Centos4, qui est la fin de la vie et a une ancienne version RPM. Malheureusement, c'est ce que l'OP et le vôtre essaient vraiment de travailler avec. Bien que de loin, c'est le plus proche d'une solution.
Dans les définitions de macro, une barre oblique inverse de la ligne est supprimée et utilisée pour indiquer à RPM que la définition de la macro continue. Le caractère Newline est pas em> dépouillé (contrairement à un fichier de fabrication). Par conséquent, si vous construisez un script multiligne, les semi-couches ne sont pas nécessaires. Cela signifie également que si vous divisez une seule commande, vous devez utiliser 3 em> backslashes. Deux pour donner une barre oblique inverse que la coquille verra et une pour dire à RPMBuild de continuer à analyser la macro. La coquille retirera la barre oblique inverse qu'il voit, plus la nouvelle ligne et qui donnera une commande sur deux lignes. whew em> !! p>
% Définir FAITE FAITE \\\ NAME = TODO \\\ AIDE \\\
Si j'étais vous, je maintiens la liste dans un fichier source.
contenu de dans le fichier de spécifications: p> % {_ sourcedir} / liste code>: p>
Vous ne pouvez pas vraiment faire de macros multilignes dans un fichier de spécifications comme vous pouvez dans votre fichier ~ / .rpmmacros. Type de stupide.
i Créez une sous-répertoire Specs / Inc / avec des fichiers spécifiques qui agissent en tant que macros multilignes utilisées par tous les packages créés pour mon site. Au lieu d'utiliser des macros comme Voici un exemple complet. P> inc / env. / P> inc / foo.spec p> puis dans mon fichier de spécification de package, myLib.Spec: p> % foo code>, vous pouvez simplement faire
% inclure inc / foo.spec code>. Vous pouvez également créer des raccourcis pour éviter l'inclure Syntaxe
% Global Foo% Inclure Inc / FOO.SPEC code>. Ensuite, cela fonctionne comme une macro multiligne. P>
C'est une solution vraiment intelligente! Merci!!
Cet exemple doit fonctionner:
cat file.spec %define MAKE make \\\ status=success \\\ #EOL %build ${MAKE} cat Makefile status?=fail default: echo "status=${status}"