Creation d'un lien avec make

Bonjour,
Il s’agit pour moi de créer un lien avec make en specifiant la source et la cible de « ln » dans une lible d’un ficher Makefile.

Mon ficher Makefile dispose déjà d’une variable contenant la version de mon projet alors que le nom du projet est inconnu.

Mon répertoire de travail contient toutes les version du projet alors que je dois créer un nouveau lien dans mon répertoire « bin » vers le binaire de la novelle version du projet.

J’utilise make depuis le répertoire de travail avec la commande "make -C Arg Target`

j’ai essayé d’initialiser une variable avec une chaine de substitution mais j’ai un problème avec base name.

Si je lance « make -C Project-Version link » alors que « link » est la cible de mon Makefile, j’obtiens un messsage de basename m’indiquant que basename n’ pas trouver d’operande ou l’opérande est le nom du ficher avec la substitution suivante :

Project=basename -s -$(Version) \ls $(HOME) | head -1```

Lorque ma cible « link » est :

rm -f $(HOME)/.bin/$(Project_Name) 
cd ~/.bin
@echo "Cretating link named $(Project_Name) to $(HOME)/$(Project_Name)/$(Project)/bin/$(Project_Name)"
ln -s $(HOME)/$(Project)-$(old_version)/$(Project_Name)/bin/$(Project_Name) $(HOME)/.bin/$(Project_Name) 

Sauriez vous comment je pourrais procéder pour parvenir à la création de mon nouveau lien, s’il vous plait ?

(Désoleé, je sais pas formater du text avec les balise du forum.)

Bon, j’ai un problème, je ne parviens pas à vous donner la substitution exacte car les caractère de délimitation de substitution son supprimer à l’affichage.

Alors, je ne sais pas si ça a un rapport avec ton problème avec ton fichier make ou tes galères avec la syntaxe de la mise en forme du forum, mais tu n’utilises pas la bonne notation. C’est

echo ${variable}

et

echo $(commande)

Dans la façon que c’est écrite, tu fais appel à des commandes HOME, Project_Name, Project, etc… et il y a de grandes chances que ces commandes n’existent pas.

Merci pour cette réponse rapide.

Puis - je me permettre de vous demander quel est l’objet de votre proposition ?

Yes !
Bonjour !
J’ai pu visualiser en clair le contenu de la variable project.

Du coup, j’ai fait : project=ls $(HOME) | tail -1

J’obtiens le répertoire contenant la derniere version du project.

Ma cible link devient :

link :
	@echo $(project)
	rm -f ~/.bin/$(Project_Name) 
	cd ~/.bin
	@echo "Cretating link named $(Project_Name) to $(HOME)/$(project)/$(Project_Name)/bin/$(Project_Name)"
	ln -s $(HOME)/$(project)/$(Project_Name)/bin/$(Project_Name) ~/.bin/$(Project_Name) 

Merci.

Néanmoins, désolé, je ne parviens toujours pas à passer à « basename » les argument qui vont bien.

J’ai essayé de protégér quelques caractères, rien n’y fais pour moi pour le moment.

Essaie

Project=basename -s -${version} $(ls ${HOME} | head -1)

pour voir. Affiche la variable afin de voir si c’est ce que tu attends comme résultat.

En effet, plutôt clean comme indicatio, j’arrive à la bonne valuer de variable ou commande.

Ma variable Project est sensée être initializé avec le basename de mon nom de projet.

Si je peux… Me permettre, à présent j’ai un problème avec « ln »

Je transmet l’entête de mon Makefile pour exprimer le « pourquoi » si ce n’est ma méconnaissance de make.

Project_Name=./bin/head 1 Project.lst

Sub_Projects_Names=./bin/tail 2 Project.lst

libs=for j in \./bin/tail 2 Project.lst`; do echo -aI`./bin/head 1 Project.lst`/$$j/src/lib; done`

allsources=for k in \./bin/tail 2 Project.lst`; do find `./bin/head 1 Project.lst`/$$k/src/lib -name « *.ad? »; done`

old_version=./bin/tail -1 Versions.lst

#Project=basename -s -${old_version} $(ls ${HOME} | head -1)

Name=ls $(HOME) | tail -1

Project=basename -s -${old_version} $(Name)

Le message d’erreur est le suivant :
manuel@eureka:~$ make -C protovision-1.6.1r/ link
make: Entering directory ‹ /home/manuel/protovision-1.6.1r ›
rm -f ~/.bin/./bin/head 1 Project.lst
cd ~/.bin
Cretating link named joshua to /home/manuel//joshua/bin/joshua
Name is protovision-1.6.1r
Project is basename -s -1.6.1r protovision-1.6.1r
ln -s /home/manuel/basename -s -./bin/tail -1 Versions.lst ls /home/manuel | tail -1« -./bin/tail -1 Versions.lst »/./bin/head 1 Project.lst/bin/./bin/head 1 Project.lst/home/manuel/.bin/./bin/head 1 Project.lst
ln: invalid option – ‹ 1 ›
Try ‹ ln --help › for more information.
make: *** [Makefile:266: link] Error 1
make: Leaving directory ‹ /home/manuel/protovision-1.6.1r ›

Alors que ma cible link est sensée être la suivante :

link :
rm -f ~/.bin/$(Project_Name)
cd ~/.bin
@echo « Cretating link named $(Project_Name) to $(HOME)/$(project)/$(Project_Name)/bin/$(Project_Name) »
@echo Name is $(Name)
@echo Project is ${Project}
ln -s $(HOME)/$(Project)"-$(old_version)"/${Project_Name}/bin/$(Project_Name)$(HOME)/.bin/$(Project_Name)

Cretating link named joshua to /home/manuel//joshua/bin/joshua
Name is protovision-1.6.1r
Project is basename -s -1.6.1r protovision-1.6.1r
ln -s /home/manuel/basename -s -./bin/tail -1 Versions.lst ls /home/manuel | tail -1« -./bin/tail -1 Versions.lst »/./bin/head 1 Project.lst/bin/./bin/head 1 Project.lst/home/manuel/.bin/./bin/head 1 Project.lst
ln: invalid option – ‹ 1 ›
Try ‹ ln --help › for more information.
make: *** [Makefile:266: link] Error 1
make: Leaving directory ‹ /home/manuel/protovision-1.6.1r ›

J’ai changé de stratégie pour le moment j’utilise tail pour obtenir plutôt la dernière occurance de « ls $(HOME) »

Et head et tail de ./bin son des head et tail perso. Faut pas les confondre.

Et faire attention parce qu’ici je ne parviens pas à afficher correctement les commande de substitution, il manque les quote de délimitation de substiution injustement.

Désolé pour la nieme edition j’avais mal copié/collé le message d’erreur relatif à l’appele de make pour la cible link.

Mon fichier Projet.lst contient à peu près ceci :
joshua
joshua
pro
pro-algo
pro-algo-solver
pro-algo-search

Alors que le fichier Versions.lst contient uniquement les versions dans une colonne.

Les deux ficher cités sont avec le makefile dans chaque répertoire du projet de chaque version.

Je cherche un moyen de renouveller le lien dans mon répertoire « .bin » situé dans mon répertoire de travail selon le besoin.