Donc j'essaye d'écrire un Makefile à utiliser avec les fichiers QuestaSim et systemverilog. Si vous ne savez pas ce que c'est (et la plupart des gens ne le feront pas) alors ne vous inquiétez pas, ce n'est pas pertinent pour mon problème.Comment écrire un fichier makefile où les fichiers objet compilés sont dans un répertoire différent avec un nom différent?
J'ai un directeur de projet contenant: src/travail/Makefile
le répertoire src/contient plusieurs répertoires qui contiennent chacun des fichiers source.
Le répertoire travail/n'existe pas initialement et est créé par le fichier makefile. Lorsque j'appelle mon "compilateur" qui s'appelle vlog, sur un fichier .sv un répertoire est créé dans le dossier de travail avec le même nom que le fichier .sv sans le suffixe
Dans ce répertoire sont trois fichiers celui que je vais utiliser comme mon "objet" fichier est _primary.dat
Ainsi par exemple, appelant "vlog src/interface/mon_interface.sv" crée (si elle réussit) le travail /my_interface/_primary.dat
Mes fichiers .SV doivent également être compilés dans un ordre précis, et je veux que les compiler si le fichier source ou un de leurs dépendances a changé.
Je peux tourner le chemin d'accès au fichier .sv dans le chemin d'accès au fichier _primary.dat correspondant en utilisant "$ (addsuffix /_primary.dat, $ (addprefix $ (VLIB_DIR) /, $ (basename $ (notdir $ (SRC))))) "mais l'inverse est impossible, car nous perdons la structure du répertoire."
Donc je pense que ce que je veux, c'est une sorte de carte de l'objet -> src. Alors que dans ma cible $ (OBJ):, je peux faire "vlog $ (getsrc $ @)". Après cela, je dois gérer l'ordre de compilation et les dépendances, mais je peux probablement le faire.
Des suggestions?
1) Y at-il un risque de collision de nom de la source? Autrement dit, s'il y a un 'src/interface/foo.sv', peut-il y avoir aussi un' src/engine/foo.sv'? 2) Est-ce que 'src /' peut avoir plus de deux niveaux de profondeur? Autrement dit, pourrait-il y avoir un 'src/foo/bar/baz.sv'? – Beta
J'ai l'exigence que le paquet/interface/module a le même nom que le fichier. Donc, toute collision entraînerait des erreurs de compilation de toute façon. Pour le moment, les répertoires ne sont profonds qu'à deux niveaux, mais je pourrais envisager d'ajouter plus de niveaux plus tard. –
Avez-vous déjà regardé l'utilitaire 'vmake' fourni avec Questa? –