# C et C++ > C > Contribuez >  mk-project un T.D.E (Terminal Development Environment) bas sur make.

## Luke spywoker

Salut les C/C++,

je vient vous prsenter ma dernire cration: *mk-project:* un crateur, gestionnaire, de projets bas sur *make*.

*mk-project* permet de crer des projets *C*, *C++*, *python2* et *python3*.



+ Page de prsentation de mk-project.

+ Documentation de mk-project.

+ github de mk-project.



*mk-project* permet d'automatiser compltement la _compilation_, l_'excution_, le _dbogage_ et l_'investigation de code machine_, le _profilage_,...

Mais ce n'est pas tout car *mk-project* permet aussi de gnrer de la documentation a base de 3 diffrents langages de balisage:

+* texinfo*.

+ *markdown* (_Dans plusieurs dialectes_.)

+ *ReST* (_ReSTructured Text_)

Mais si vous dsirez utilisez un moteur de documentation plus avanc, tel que *sphinx*, *doxygen*, ou autres, la manipulation est facile et bien dcrite dans la documentation.



*mk-project* permet aussi d'enjoliver votre code grce aux outils suivants:

+ *indent*

+ *astyle*

+ *bcpp*

+ *pindent*

Avec _beaucoup de styles prdfinis_ mais vous laissant une ouverture afin de compltement personnaliser votre formatage de code source.



*mk-project* permet de _crer une archive de votre projet_ au format suivants:

+ *tar*

+ *tar.gz*

+ *tar.bz2*

+ *zip*



Et *mk-projec*t permet aussi bien d'autres choses...

*mk-project* est disponible sous forme de paquetage debian et d'archive tar.gz.

*:note:* Une fois installer vous pourrez *hacker* le code grce au _Makefile_ contenus dans le dossier de destination (habituellement _/usr/local/share/mk-project_).

*.. warning::* 

*mk-project* a pas mal de dpendances entre autre la bibliothque *libvte-2.91* qui vient d'apparatre dans les dpts remplaant l'ancienne version *libvte-2.90* 
  sur laquelle mon diteur de texte a terminaux intgres it-edit (Integrated Terminals Editor) est bas (sniff !).



Dpendances de *mk-project*:

  * libgtk-3-dev

  * libvte-2.91-dev

  * libxml2-dev

  * pandoc

  * python(3)-docutils

  * texinfo    

  * xdg-utils

  * findutils

  * libc-bin

  * binutils

  * bsdmainutils

  * indent

  * astyle

  * bcpp

  * gettext 

  * make 

*P.S:* Je suis ouvert a toute formes de critiques *mais* j'ai conus cet outil pour des besoins personnels et si je le distribue c'est parce que je pense qu'il peut tre utile a d'autres (les utilisateurs de *vi* et compagnie vont tre ravis).

----------


## LittleWhite

Bonjour,

Parmi les dpendances, ne pouvez vous pas faire en sorte que si, disons indent manque, qu'il soit juste dsactiv. Ainsi, votre projet ne dpend plus vraiment de milles choses, mais lorsque dispo, il utilise les milles outils de la machine (cela me semble possible pour tous les langages supports + les enjoliveur de code + gnrateurs de code).

Si vous utilisez GTK, c'est qu'il y a une interface graphique ? 

Mme en lisant la documentation, j'ai pas trs bien compris comment faire un nouveau projet. En lisant en diagonale, j'ai juste vu ce que je devais savoir comme info, avant de crer le projet.

----------


## Luke spywoker

Merci Little white pour votre commentaire,

Alors pour crer un projet c'est assez simple, il y a une *G.U.I*, 



laissez vous guider...

"D'ailleurs la plupart des *informations demandes* sont *optionnelles* ou *ont des valeurs par dfaut* bien dfinis."



Sinon vous pouvez tlcharger le tarball (mk-project-1.0.0.tar.gz) pour ne pas souffrir d'un paquetage manquant car le script


```

```

ne demande que le *stricte ncessaire* pour* retourner sans erreur*, 

et vous prsentera _une liste de paquetage manquants_, 

qui comme dit dans la documentation (que j'ai maladroitement rdig je le reconnais) sont optionnelles. 

Car si un un binaire vous manque *make* le dtectera et ne vous proposera pas le *target* correspondant.

---

_Merci pour vos commentaires_, a serai pas mal d'avoir des ractions des utilisateurs d'diteurs en ligne de commande comme *vim*.

PS: Si vous utilisez un tel diteur merci de bien vouloir me signaler si un raccourcis clavier est en conflit !

----------


## LittleWhite

a ne compile pas  ::aie:: .



> make[2]*: on entre dans le rpertoire */tmp/mk-project-1.0.0/source*
> gcc -DHAVE_CONFIG_H -I. -I..  -DPREFIX=\"/usr/local\"  -pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/libdrm -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libxml2 -g -O2 -MT ./mk_project-main.o -MD -MP -MF .deps/mk_project-main.Tpo -c -o ./mk_project-main.o `test -f './main.c' || echo './'`./main.c
> In file included from ./main.c:36:0:
> ././GUI/setup_gui.h:43:22: erreur fatale*: ./dialog.h : Aucun fichier ou dossier de ce type
>  #include "./dialog.h"
>                       ^
> compilation termine.
> make[2]: *** [Makefile:586: mk_project-main.o] Error 1
> make[2]*: on quitte le rpertoire */tmp/mk-project-1.0.0/source*
> ...

----------


## Luke spywoker

Drle d'erreur,

car je n'ai pas de fichier dialog.c correspondant dans toute l'arborescence donc en enlevant la ligne:



```
#include "./dialog.h"
```

dans le fichier _./source/GUI/setup_gui.h_ a devrai fonctionner ???

Bizarre car j'ai tester le tarball maintes fois !

Je suis dsol, je vais m'empresser de corriger cette erreur.

----------


## LittleWhite

Ok, a compile. Aprs, a ne se lance pas, car il ne peut crire le fichier de configuration. Je conseille d'utiliser le rpertoire utilisateur pour les fichiers de config.
Impossible de slectionner /tmp comme dossier du projet  ::(:  (car il souhaite crer un sous dossier).
J'ai cr un projet, il n'y avait pas de Makefile (?) (je n'ai pas lu la documentation).

----------


## Luke spywoker

J'ai remarquer effectivement, pendant que je reparais l'erreur, que mon build ne supporte pas le VPATH, ou d'installation dans un dossier DESTDIR.



```

```

J'ai tout essayer afin que cela soit possible, fonctionne dj mieux, si l'on enlve la macro m4



```

```

Et/ou  (je ne sais pas) dans le _Makefile.am_ principale l'on  enlve le dossier courant:



```

```

Cela marche dj un peu mieux. 

Pourrrai tu m'aider concernant ce problme ?






> Je conseille d'utiliser le rpertoire utilisateur pour les fichiers de config.


D'accords mais si il y a plusieurs utilisateurs ?

J'utilise *$(*pkgdatadir*)* (_/usr/share/mk-project_ ou _/usr/local/share/mk-project_) pour les fichiers de configurations.






> Impossible de slectionner /tmp comme dossier du projet (car il souhaite crer un sous dossier).


Il faut que le dossier choisie soit vide et le slecteur de dossier est un peu capricieux mais il permet de crer des dossiers vierges.






> J'ai cr un projet, il n'y avait pas de Makefile (?) (je n'ai pas lu la documentation).


Normal puisque tu n'a pas installer compltement le programme et les templates pour les _Makefiles_ sont dans le dossier du programme (which default to _/usr/local/share/mk-project_).

*PS:* Je voudrai bien te certifier que mon build enlve tout les fichiers installs sauf que ce dernier n'enlve pas les quelques icnes de mimetype des fichiers _*.mkp_ qui sont les fichiers des projets *mk-project* comme un fichier _*.cbp_ (pour *code-block*).

J'ai pris la dcision de laisser ces quelques icnes, qui s'installe grce a *xdg-resource* dans le icon-theme par dfaut, au cas ou aprs dsinstallation il vous reste des dossiers de projets *mk-project*.   

Exception qui confirme la rgle de mes builds: absolument tout enlever ce que l'on installe.

*PS:* Qu'est que j'ai fait de travers pour que le systme de VPATH ne fonctionne pas, ce n'est pas automatique avec automake ? 

Je te redemande cordialement ton aide si tu a le temps afin de rgler le problme de VPATH ou DESTDIR.

Ont pourrai commencer par la ligne de commande que tu a utiliser pour_ ./configure_...

----------


## LittleWhite

> D'accords mais si il y a plusieurs utilisateurs ?


Chacun  sa propre configuration (comme pour vim, nano, firefox...).




> Il faut que le dossier choisie soit vide et le slecteur de dossier est un peu capricieux mais il permet de crer des dossiers vierges.


Sachant que l'on prcise le nom du projet juste avant, pourquoi ne pas laisser le choix de /tmp possible et y crer un rpertoire nom_de_projet dans le rpertoire slectionn (solution de Qt Creator).




> Ont pourrai commencer par la ligne de commande que tu a utiliser pour_ ./configure_...


J'ai juste fait :



> ./configure
> make -j 4


 ::D:

----------


## Luke spywoker

Merci pour ton intrt port a mon programme




> Chacun  sa propre configuration (comme pour vim, nano, firefox...).


Dsol mais j'ai pas bien saisie: si je copie les fichiers de configuration dans le $HOME de celui qui installe le programme, alors que vont faire les autres utilisateurs si il veulent utiliser le programme, a ne marchera pas ?




> Sachant que l'on prcise le nom du projet juste avant, pourquoi ne pas laisser le choix de /tmp possible et y crer un rpertoire nom_de_projet dans le rpertoire slectionn (solution de Qt Creator).


Je pense que c'est une mauvaise solution car le dossier /tmp est vid de son contenus a chaque shutdown, non ? 

*:note:* Il faut savoir que le dossier du projet est a conserver car il contient (entre autre) les (futures) sources, etc... donc /tmp ets une trs mauvaise destination a moins de faire un make dist-* avant chaque shutdown et de copier l'archive autre part. 

Aprs il est vrai que le fait que comme l'on choisie un nom de projet l'on pourrai crer un dossier de projet (avec un nom identique) dans le dossier slectionner.

A la place il faut renseigner un dossier de destination pour le projet (vide). 

---




> J'ai juste fait :
> ./configure
> make -j 4


Mais tu n'a pas taper sudo make install donc normal que le programme ne fonctionne pas correctement sans les dpendances.

---

Je pensais que tu avait taper quelque chose comme 


```

```

Car je pensais que tu faisait une installation de teste ?
Et que tu avait une arborescence rserver au testes de programmes.  

Merci pour ton intrt port a mon programme mais si tu ne l'installe pas convenablement il ne risque pas de marcher correctement.  

PS: Si tu a quelques informations utiles ou ides pour une installation de ce type, concernant automake, (surtout pour DESTDIR) je suis preneur, a serai sympa de m'informer.

----------


## LittleWhite

> Dsol mais j'ai pas bien saisie: si je copie les fichiers de configuration dans le $HOME de celui qui installe le programme, alors que vont faire les autres utilisateurs si il veulent utiliser le programme, a ne marchera pas ?


Bien vu (et encore, c'est discutable). Cela veut dire qu'il faut crer les fichiers de configurations au dmarrage de l'application (beaucoup font ainsi).




> Je pense que c'est une mauvaise solution car le dossier /tmp est vid de son contenus a chaque shutdown, non ?


Ca, c'est mon souci (enfin, le souci de l'utilisateur). Si je suis dbile, j'ai le droit  ::aie:: . J'ai pris /tmp, comme j'aurais pu prendre tout autre rpertoire. Mais si je veux prendre /tmp, c'est mon choix.




> Mais tu n'a pas taper sudo make install donc normal que le programme ne fonctionne pas correctement sans les dpendances.


Ce point l est discutable  :;): 
J'ai dj vu des programmes fonctionner sans faire d'install.




> Merci pour ton intrt port a mon programme mais si tu ne l'installe pas convenablement il ne risque pas de marcher correctement.


Je retesterai avec un prefix. Mais, j'estime que de ne pas l'installer, ne doit pas gner son fonctionnement (peut tre je me trompe  ::D: )

----------


## Luke spywoker

> Si je suis dbile, j'ai le droit . J'ai pris /tmp, comme j'aurais pu prendre tout autre rpertoire. Mais si je veux prendre /tmp, c'est mon choix.


Je calcule avec la btise ou les diffrences des utilisateurs, mais dans ce cas c'est absurde, sauf que je sais que tu voulais simplement tester mon programme.

Du coup l'on en revient avec l'ide d'arborescence pour tester des programmes.

Les autotools prennent cela en charge sous forme de DESTDIR ou sous une autre forme (je crois) d'ailleurs je ne sais si je dois ajouter:



```

```

$(DESTDIR) dans ce cas l ? 





> Mais, j'estime que de ne pas l'installer, ne doit pas gner son fonctionnement (peut tre je me trompe )


L'on en revient l ou l'on en tait.

a dpends srement si le programme a des dpendances qu'il faut bien localiser ou si c'est un utilitaire faon philosophie UNIX: de petits outils qui font une seule tche et qui le font bien (qui du coup n'ont pas de dpendances).

Mais moi j'estime que les instructions sont:



```

```

Aprs l'on peut passer des arguments a ces 3 commandes, si l'on dsire autre chose.

D'ailleurs tu te trompe toi mme car tu m'a dit d'installer les fichiers de configurations dans le $HOME. mme si mon programme appelle une fonction de gnration de paramtre par dfaut si il ne peut lire le fichier de configuration mais c'est pltot prvue si l'on efface ce dernier ou si l'on veut gnrer le fichier au premier lancement, mais le problme est que il requiert un dossier afin de le stocker...

Ne te vexe pas mais je pense que tu a tort sauf utilitaires philosophie UNIX qui pourrait fonctionner sans installation.

Mais tout cela reste encore a dbattre et a mditer: Par exemple comme kannagi package ses crations.

----------


## LittleWhite

Ce que je voulais dire, c'est : placez les fichiers de configuration dans le rpertoire utilisateur. La bonne solution (aka : ce que je ferai), s'avre de les crer si les fichiers n'existent pas (dans le rpertoire utilisateur).
Pour le slecteur de dossier (pour indiquer o le projet ira) ... son comportement n'est pas intuitif. En effet, il y a une icone pour crer un nouveau dossier et lorsque nous sommes dans ce nouveau dossier, il faut toujours prciser le nom d'un dossier, que lui, il va cr. Pourquoi ne pas pouvoir immdiatement slectionner le dossier (et au pire, crer un nouveau dossier avec le nom du projet).
Je pense que le terminal devrait se placer directement dans le dossier du projet crer une fois le projet cr. Il semble le faire, mais aprs un certain temps (un peu bizarre).
Dans la reconfiguration du projet, je ne peux pas changer son numro de version ?
 quoi sert de prciser un diteur (geany) lors de la configuration ?

Pouvez-vous rajouter l'option de crer un projet vide (sans fichier de code, pour dmarrer) ?

Faire un make du projet gnr est bourrin lorsque l'on n'a pas toutes les dpendances :



> which: no evince in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)
> which: no xpdf in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)
> which: no mupdf in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)
> which: no pdfcube in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)
> which: no fbreader in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)
> which: no pdf-viewer in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)
> which: no okular in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)
> which: no strace in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)
> which: no ltrace in (/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl)
> ...


Lorsque de la configuration du projet, le bouton pour passer  l'tape suivante s'appelle "Apply". Il me semble plus naturel de l'appeler "Next" (il est  cot d'un bouton back en plus).

----------


## Luke spywoker

Encore merci pour votre intrt porter a mk-project,

En fates tu a compltement raison: j'explique...

Ce programme ncessite de revoir quelques points, j'ai peut-tre t un peu fainant et du coup, car je voulais dans un premier temps crer un programme pour des besoins personnelle puis j'ai rajouter certaines chose surtout le terminal diteur car je n'utilise pas vim et compagnie mais mon diteur en mode graphique it-edit qui se marie bien avec le programme car tant un I.T.E Integrated Terminals Editor c.a.d que l'on peut aisment taper des commandes dans des terminaux habilement placer. 

Par rapport aux autres diteur proposant un terminal a mon humble avis.

Et donc la G.U.I est faites pour les autres: les utilisateurs de vim, nano, edcetera...  et m'est inutile pouvant faire toutes les modifications du Makefile de base a la mains. 

Par exemple ajouter un fichier au projet.

Concernant ton ide de crer un projet sans fichiers: je voulais aussi transmettre mon savoir faire comme dit dans le mot de la fin de la doc.

Mais je retiens ton ide et pense fortement ne pas polluer le projet d'un autre avec mon savoir faire de little C/C++. ::ptdr:: 

Je vais viter les messages de warnings quand un binaire n'est pas prsent, au vue de la sortie dans ce cas.




> Lorsque de la configuration du projet, le bouton pour passer  l'tape suivante s'appelle "Apply". Il me semble plus naturel de l'appeler "Next" (il est  cot d'un bouton back en plus).


Cela est d a gtk car je programme, ce coup-ci, de sorte a ce que l'interface soit totalement en anglais et comme le widget assistant est un peu capricieux aussi car le bouton peut s'appeler Next et non Apply mais dans ce cas il me semble qu'il n'est pas possible de finaliser le projet du moins je n'ai pas russis a en faire de telle sorte... 

C'est pas toujours comme ont veut c'est souvent comme ont peut.    

:note: Afin que le programme soit entirement en anglais, indpendamment de la localisation, j'utilise gettext et setlocal sinon il y a des incohrence comme certains string automatiquement traduit: Cancel en Annuler et mme Files en Fichiers !?!




> Pour le slecteur de dossier (pour indiquer o le projet ira) ... son comportement n'est pas intuitif. En effet, il y a une icone pour crer un nouveau dossier et lorsque nous sommes dans ce nouveau dossier, il faut toujours prciser le nom d'un dossier, que lui, il va cr.


C'est entirement la faute de gtk (Nouvelle (version) gnration comme les boutons en haut au lieux d'en bas).




> Pourquoi ne pas pouvoir immdiatement slectionner le dossier (et au pire, crer un nouveau dossier avec le nom du projet).


Je vais suivre ton conseil et crer un nouveau dossier avec le nom du projet au lieu de slectionner un dossier l'on slectionnera une destination.   

Si tu a d'autres conseils, ides, remarques, il sont la bienvenue.

Merci encore je me suis aperus grce a toi que mon programme souffre de quelques lacunes importantes malgr que la version actuelle me convient parfaitement a moi. 

Mais je vais faire les corrections ncessaires pour les autres.

H.S: A tu une ide pourquoi les participant du forum https://www.ubuntu-fr.org/ reste muet a chaque nouvelle cration, est ce-que Ubuntu est un systme Linux pour utilisateur lambda (Windows like presque) et non de programmeur... Je suis franchement dus de cette communaut et non de l'OS !

J'utilise Ubuntu a cause des drivers NVIDIA disponible, dommage que la philo debian ne permette pas ce genre de compromis, surtout pour OpenGL.

Anecdote: j'ai crasher ma premire installation de debian a la recherche de driver NVIDIA en tlchargeant des paquetages de drivers qui mon cout un cran tout noir et impossible de rparer connaissant mal ce systme, dommage il faut que je ressaye.

J'allais oublier



> quoi sert de prciser un diteur (geany) lors de la configuration ?


Et bien a rien si ce n'est pour de future utilisations et a remplir le fentre de l'asssitant qui n'a que  2 composante sinon: les options passer a make  a chaque appel et la compression.
C'est purement esthtique. 

Dsol pour la confusion mais l'information pourrai tre utile en cas de collaboration d'un programmeur utilisant un diteur en mode terminal.

----------

