# Xcode et terminal



## spitfire378 (1 Décembre 2007)

Bonjour, je commence tout juste le Langage C avec Xcode et je voulais savoir si il était possible de tester ses lignes de codes directement a partir de Xcode. Ou bien est-il nécessaire d'aller systématiquement récupérer le fichier créé dans le terminal. Merci


----------



## zacromatafalgar (1 Décembre 2007)

Salut,

Xcode est suffisant


----------



## Eul Mulot (1 Décembre 2007)

Pour se faire, crée un nouveau projet de type Command Line Utility, Standard Tools.

Ensuite tu auras un main près à être compilé via les différents boutons de la toolbarr.


----------



## spitfire378 (2 Décembre 2007)

Merci c'est tout bon!


----------



## tatouille (3 Décembre 2007)

Eul Mulot a dit:


> Pour se faire, crée un nouveau projet de type Command Line Utility, Standard Tools.
> 
> Ensuite tu auras un main près à être compilé via les différents boutons de la toolbarr.



oui mais quand tu passes des options xcode c est relou


----------



## Eul Mulot (3 Décembre 2007)

Ouai je confirme, pas moyen d'executer du code utilisant GObject, ça passe à la compile mais il bute sur la première fonction censée être importée dans mes libs GObject, donc il va pas les chercher, j'ai pourtant foutus les dylib dans mon projet et indiqué les paths qu'il fallait en théorie.


----------



## ntx (3 Décembre 2007)

Eul Mulot a dit:


> Ouai je confirme, pas moyen d'executer du code utilisant GObject, ça passe à la compile mais il bute sur la première fonction censée être importée dans mes libs GObject, donc il va pas les chercher, j'ai pourtant foutus les dylib dans mon projet et indiqué les paths qu'il fallait en théorie.


Est-ce que tu es sûr que la commande de compilation générée par Xcode est bien celle que tu attends ?  Il y a tout ce qu'il faut dans le paramétrage de la compilation pour compiler n'importe quel type de projet.


----------



## Eul Mulot (3 Décembre 2007)

Je pense que la commande de compilation est la bonne, puisque avant quand j'ai merdé dans les paths pour les library, il ne compilait pas quand j'incluais gtk/gtk.h .

Si je compile un helloworld.c de Gtk sous mon porjet XCode, ça compile, mais c'est juste que j'ai un unknow symbol à l'execution.

Si je vais dans mon projet Xcode, et que ce même main ets compilé avec ceci

```
gcc main.c -o main.out `pkg-config --cflags --libs gtk+-2.0`
```
Ça compile, et l'execution se passe sans problème, ma piote fêntre s'affiche comme une grande.

J'ai pourtant mis "OTHER_LDFLAGS_QUOTED_FOR_TARGET_1" à "`pkg-config --cflags --libs gtk+-2.0`" dans les options de ma target sous Xcode, et j'ai ajouté les librairies qu'il fallait dans mon projet XCode (par contre elle sont affichées en rouge).

C'est bien "OTHER_LDFLAGS_QUOTED_FOR_TARGET_1" qu'il faut modifier si on veut ajouter des options de compilation non ? Ou est-ce un autre truc à changer ?

Là je commence à patiner vite fait ...

Edit : dans la partie Linking de la target, j'ai bien "Other Linker Flags" à "`pkg-config --cflags --libs gtk+-2.0`"


----------



## tatouille (3 Décembre 2007)

Eul Mulot a dit:


> Ouai je confirme, pas moyen d'executer du code utilisant GObject, ça passe à la compile mais il bute sur la première fonction censée être importée dans mes libs GObject, donc il va pas les chercher, j'ai pourtant foutus les dylib dans mon projet et indiqué les paths qu'il fallait en théorie.



je parlais d'arguments passes a ton utilitaire


----------



## ntx (3 Décembre 2007)

Eul Mulot a dit:


> Si je compile un helloworld.c de Gtk sous mon porjet XCode, ça compile, mais c'est juste que j'ai un unknow symbol à l'execution.


Quel symbole ? Sais-tu dans quelle librairie il est sensé se trouver ?
Pour tes librairies, si elles sont en rouge dans Xcode c'est qu'il ne les a pas trouvées.


----------



## Eul Mulot (4 Décembre 2007)

Damned ! 

Il faut que j'utilise Gtk (pour l'instant) puis GLib et GStreamer (pour plus tard).

Du genre il ne trouve pas en fait la première fonction qui fait appel à une des librairies externes censés être importées dans mon répertoire de projet, du genre pour un hellow world ci :


```
int main (int argc, char *argv[])
{
    
    /* GtkWidget est le type pour déclarer les widgets. */
    
    GtkWidget *window;
    GtkWidget *button;
    
    /* Cette fonction est appelée dans toutes les applications GTK. 
        * Les paramètres passés en ligne de commande sont analysés et 
        * retournés à l'application. */
    
    gtk_init (&argc, &argv);
    
    /* Création d'une nouvelle fenêtre. */
    
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    
    /* Lorsque la fenêtre reçoit le signal "delete_event" 
        * (envoyé par le gestionnaire de fenêtres en utilisant l'option
           * « close » ou la barre de titre), on lui demande d'appeler la
        * fonction delete_event() définie plus haut. La donnée passée en
        * paramètre à la fonction de rappel est NULL et est ignoré dans le
        * rappel. */
    
    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
                        GTK_SIGNAL_FUNC (delete_event), NULL);
    
    /* Ici, on connecte l'évenement "destroy" à un gestionnaire de signal.
        * Cet événement arrive lorsqu'on appelle gtk_widget_destroy() sur la
        * fenêtre, ou si l'on retourne TRUE dans le rappel "delete_event". */
    
    gtk_signal_connect (GTK_OBJECT (window), "destroy",
                        GTK_SIGNAL_FUNC (destroy), NULL);
    
    /* Configuration de la largeur du contour de la fenêtre. */
    gtk_container_border_width (GTK_CONTAINER (window), 10);
    
    /* Création d'un nouveau bouton portant le label 
        * "Bonjour tout le monde". */
    
    button = gtk_button_new_with_label ("Bonjour tout le monde");
    
    /* Quand le bouton recevra le signal "clicked", il appellera la
        * fonction hello() définie plus haut en lui passant NULL en paramètre. */
    
    gtk_signal_connect (GTK_OBJECT (button), "clicked",
                        GTK_SIGNAL_FUNC (hello), NULL);
    
    /* Ceci provoquera la destruction de la fenêtre par appel de la
        * fonction gtk_widget_destroy(window) lors du signal "clicked".  
        * Le signal de destruction pourrait venir de là, ou du 
        * gestionnaire de fenêtres. */
    
    gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
                               GTK_SIGNAL_FUNC (gtk_widget_destroy),
                               GTK_OBJECT (window));
    
    /* Insertion du bouton dans la fenêtre (container gtk). */
    
    gtk_container_add (GTK_CONTAINER (window), button);
    
    /* L'étape finale consiste à afficher ce nouveau widget... */
    
    gtk_widget_show (button);
    
    /* ... et la fenêtre. */
    
    gtk_widget_show (window);
    
    /* Toutes les applications GTK doivent avoir un gtk_main(). 
        * Le déroulement du programme se termine là et attend qu'un
        * événement survienne (touche pressée ou événement souris). */
    
    gtk_main ();
    
    
    return 0;
}
```

J'obtiens 


			
				 Run Log a dit:
			
		

> [Session started at 2007-12-03 21:22:22 +0100.]
> ZeroLink: unknown symbol '_gtk_widget_destroy'
> 
> MediaCenter has exited due to signal 6 (SIGABRT).



Si jamais je fais juste appel à la fonction d'init de gtk ( gtk_init(&argc, &argv) ) j'obtiens ceci :



			
				 Run Log a dit:
			
		

> [Session started at 2007-12-03 21:22:22 +0100.]
> ZeroLink: unknown symbol '_gtk_init'
> 
> MediaCenter has exited due to signal 6 (SIGABRT).



C'est donc clairement le problème qu'il ne trouve pas les librairies que j'ai pourtant ajoutées depuis le répertoire de MacPorts correspondant, j'en ai même importé d'autres pour voir si y'avait pas de dépendances entre ces librairies.

Donc mon soucis doit venir de l'ajout de librairies qui merde à l'exécution car ça passe sans problème à la compilation en incluant Gtk.h.


----------



## ntx (4 Décembre 2007)

Le problème du zerolink c'est autre chose - je sais pas pourquoi je m'en doutais quand j'ai posé la question  . Décoche l'option dans le paramètres de compilation et ça ira mieux.


----------



## Eul Mulot (4 Décembre 2007)

Merci Ntx pour ton aide mais si je décoche Zerolink dans les options de build, je me fais insulter par le compilateur, me disant qu'il n'existe pas de répertoire ou fichier `pkg-config --cflags --libs gtk+-2.0`. (enfin une fois le message d'erreur était complet, contenant toute l'option de compile, et une autre fois, ce message d'erreur était coupé en deux, sur deux lignes ...

Je sens que je vais faire un vieux makefile des familles et jongler entre le terminal et XCode pour l'édition :/


----------



## ntx (4 Décembre 2007)

Pourrais tu mettre la ligne de commande générée dans Xcode ?


----------



## Eul Mulot (4 Décembre 2007)

Je comprend pas trop pourquoi ça me fait un tel bordel pour ajouter des pauvres trucs comme ça, je dois vraiment pas être doué, je savais bien que j'avais fait un choix plus que valable dans l'achat d'une Mighty Mouse filaire ...

Un screen vaut mieux que de longs discours !


----------



## tatouille (5 Décembre 2007)

arrete de passer pkg config comme cela ca ira mieux, ajoute tes Includes A LA MAIN et drag ta lib dans xcode


----------



## ntx (5 Décembre 2007)

Eul Mulot a dit:


> Un screen vaut mieux que de longs discours !


Ca ce n'est pas la commande de compilation, c'est juste l'erreur produite :rateau:


----------



## clampin (7 Décembre 2007)

hello

Je travaille encore avec xcode 2.5 (j'ai pas encore installé leopard), et je me retrouve avec un problème.

Je n'utilisait pas de bibliothèque bizarre avant (je faisais des truc simple). 

J'ai un peu avancé dans le c et maintenant je teste l'impression via cups. donc j'ai fait le programme suivant 


```
#include <stdio.h>
#include <stdlib.h>
#include <cups/cups.h>

int main(void)
{
    int num_dests;
    cups_dest_t *dests;
    int jobid;
    num_dests = cupsGetDests(&dests);
    
    
    printf("Imprimantes : %d\n", num_dests);
    
    jobid = cupsPrintFile("Stylus_D88","Printing.c", "title", 0, NULL);
    
    return 0;
    
}
```
Ce fichier se nomme printing.c. 

Je le compile à la mano 


```
gcc -o myprogram printing.c -lcups
```
Mais bon, j'aimerai bien sur en faire un projet _standart tool. _Où dois-je mettre -lcups pour compiler dans xcode ? (J'avoue ne pas bien comprendre ou placer mon option de compilation)

Merci et désolé si je fais mon clampin...j'ai examiné et testé différentes possibilité ça ne va pas.


----------



## ntx (7 Décembre 2007)

Il te suffit d'ajouter ta librairie à ton projet et tes options de compilation sont mises à jour automatiquement. Sinon "Get Info" sur ta cible.


----------

