# Compiler un programme C dans Vim sans makefile

**URL:** <https://www.debian-fr.org/t/compiler-un-programme-c-dans-vim-sans-makefile/21784>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 8:34 UTC](https://www.debian-fr.org/t/compiler-un-programme-c-dans-vim-sans-makefile/21784 "2016-02-20T20:34:43Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Vonstorm](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/dec6dc/32.png) [@Vonstorm](https://www.debian-fr.org/u/Vonstorm)\
**Post date:** [Février 20, 2016, 8:34 UTC](https://www.debian-fr.org/t/compiler-un-programme-c-dans-vim-sans-makefile/21784/1 "2016-02-20T20:34:43Z")

</div>

Bonsoir à toutes et tous!

Je débute en C…

A l’instar d’un EDI comme Code::Blocks, j’aimerais:

1/ Compiler un programme à partir de Vim sans makefile (ou alors en le créant automatiquement via Vim également)  
2/ Exécuter ce même programme toujours à partir de Vim

J’ai parcouru différents sites, mais la plupart montrent un exemple avec makefile.

En fait, le but avoué est de mapper une touche pour la compilation/exécution du programme, dans le genre:

```auto

```

ou encore

```auto

```

Mais je m’y prends surement très mal (soyez indugents svp 🙂 ).

Donc, pour résumer ma question:

1/ Peut-on compiler ET exécuter le programme en ne mappant qu’une seule touche ?  
2/ Quel serait le bon mappage ?  
3/ Vaut-il mieux créer un makefile avant l’opération? Comment? Peut-on mapper une touche pour la création de ce même makefile?

Merci d’avance et bonne soirée 🙂

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 8:34 UTC](https://www.debian-fr.org/t/compiler-un-programme-c-dans-vim-sans-makefile/21784/2 "2016-02-20T20:34:47Z")

</div>

```auto
ou encore
[code]map <F5> :!gcc -o % -lm %.o<cr>[/code]

[quote="Vonstorm"]1/ Peut-on compiler [u]ET[/u] exécuter le programme en ne mappant qu'une seule touche ?[/quote]
Oui
[quote="Vonstorm"]2/ Quel serait le bon mappage ?[/quote]
[code]map <F5> :!gcc -o %:r % && ./%:r<cr>[/code]
C'était pas si mal ce que tu avais écris. Pour le « %:r » regarde là :
[url=http://forum.debian-fr.org/viewtopic.php?p=103448#p103448]Sujet sur vim dans Truc et astuces[/url]
[quote="Vonstorm"]3/ Vaut-il mieux créer un makefile avant l'opération? Comment? Peut-on mapper une touche pour la création de ce même makefile?[/quote]
L'interêt d'un makefile c'est juste d'automatiser et d'accélérer. Mais que quand on a une série de fichier. Tu peut te faire un modèle de Makefile directement généré par vim mais pas complet.

[quote="Vonstorm"]Merci d'avance et bonne soirée :slightly_smiling:[/quote]
Merci et bonne journée
```

ou encore

```auto

```

> [@](#):
>
> 1/ Peut-on compiler ET exécuter le programme en ne mappant qu’une seule touche ?

Oui

> [@](#):
>
> 2/ Quel serait le bon mappage ?

```auto

```

C’était pas si mal ce que tu avais écris. Pour le « %:r » regarde là :  
[Sujet sur vim dans Truc et astuces](http://forum.debian-fr.org/viewtopic.php?p=103448#p103448)

> [@](#):
>
> 3/ Vaut-il mieux créer un makefile avant l’opération? Comment? Peut-on mapper une touche pour la création de ce même makefile?

L’interêt d’un makefile c’est juste d’automatiser et d’accélérer. Mais que quand on a une série de fichier. Tu peut te faire un modèle de Makefile directement généré par vim mais pas complet.

> [@](#):
>
> Merci d’avance et bonne soirée 🙂

Merci et bonne journée

---

<div class="post-metadata">

**Author:** ![Vonstorm](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/dec6dc/32.png) [@Vonstorm](https://www.debian-fr.org/u/Vonstorm)\
**Post date:** [Février 20, 2016, 8:34 UTC](https://www.debian-fr.org/t/compiler-un-programme-c-dans-vim-sans-makefile/21784/3 "2016-02-20T20:34:51Z")

</div>

Merci Misterfreez!

Grâce à toi, j’avance à pas de géants 🙂

Juste un p’tit problème au moment de l’exécution:

```auto

```

Mais si je fais `cd /home/dsw/code/Ex1/` et puis `./main` dans un terminal, le programme s’exécute bel et bien!

Je suppose que le problème se situe au niveau de `.//` mais je n’en suis pas sûr…

Pourtant dans le lien que tu m’as donné (et pour lequel je n’avais rien trouvé hier en faisant une recherche sur le mot vim dans la rubrique T&A 😮 ), je ne vois pas ce que je pourrais utiliser d’autre que `./%:r`  
Ca fonctionne tel quel chez toi ❓

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 8:34 UTC](https://www.debian-fr.org/t/compiler-un-programme-c-dans-vim-sans-makefile/21784/4 "2016-02-20T20:34:51Z")

</div>

Intéressant tu m’a fait découvrir quelque chose sur vim (comme quoi même après 4 ans).

Tu es où quand tu lance vim ? Dans / ?

À ce moment là je pense qu’il deviens plus simple de créer un makefile.  
Encore une fois ça ne marche que pour un seul fichier source.  
La commande vim c’est :

```auto

```

Il faut donc un makefile dans le répertoire des source que voici :

[code]CC=gcc  
CXX=g++

CXXFLAGS=-Wall -Werror -g -pipe -O2 -march=prescott -fomit-frame-pointer  
CFLAGS=$(CXXFLAGS) -ansi

RM = /bin/rm -v

SRC = $(wildcard \*.c)  
OBJ = $(wildcard \*.o)

.PHONY: clean all

all: $(EXEC)

$(EXEC) : $(EXEC).o

$(EXEC).o : $(EXEC).c

clean :  
$(RM) $(OBJ)

mrproper: clean  
$(RM) $(EXEC)[/code]

---

<div class="post-metadata">

**Author:** ![Vonstorm](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/dec6dc/32.png) [@Vonstorm](https://www.debian-fr.org/u/Vonstorm)\
**Post date:** [Février 20, 2016, 8:34 UTC](https://www.debian-fr.org/t/compiler-un-programme-c-dans-vim-sans-makefile/21784/5 "2016-02-20T20:34:56Z")

</div>

Quand je fais :cd, il me retourne /home/dsw

En fait j’exécute Vim via un lanceur…

J’ai également tenté: `:cd /home/dsw/code/Ex1` afin de le mettre dans le bon répertoire avant de lancer la commande mappée sur F5, mais le message d’erreur est le même.

Il ne me reste plus qu’à essayer via un makefile… Je te tiens au courant 🙂

---

<div class="post-metadata">

**Author:** ![Vonstorm](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/dec6dc/32.png) [@Vonstorm](https://www.debian-fr.org/u/Vonstorm)\
**Post date:** [Février 20, 2016, 8:37 UTC](https://www.debian-fr.org/t/compiler-un-programme-c-dans-vim-sans-makefile/21784/6 "2016-02-20T20:37:33Z")

</div>

Fainéant comme je suis, j’ai un peu laissé passer de temps avant de me lancer dans les makefiles.

Entre temps, j’ai trouvé la solution pour ne plus obtenir d’erreur à l’exécution du programme compilé, j’ai ajouté `set autochdir` à mon .vimrc et tout roule!

Merci encore pour ton aide et bonne soirée! 😃

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 8:37 UTC](https://www.debian-fr.org/t/compiler-un-programme-c-dans-vim-sans-makefile/21784/7 "2016-02-20T20:37:35Z")

</div>

Tu nous ajoute ça un fil dans trucs et astuces que j’ai mis plus haut ?

Bon ben je l’ai fait 🙂
