# [Discussione] uso di una versione in particolare delle qt

## fraido

ciao a tutti,

volevo porvi una domanda forse stupida, ma è un pò che ci penso e non trovo la soluzione.

Allora ho installato (con emerge) sul mio sistema due versioni delle qt e vorrei capire come si può decidere a priori con quale versione il sistema compilerà i programmi.

La risposta banale a cui sono arrivato è l'overriding della variabile d'ambiente: QTDIR.

A priori mi sembra che una cosa del genere non possa funzionare perchè controllando il valore attuale della suddetta variabile e controllandone il contenuto, ottengo:

```
echo $QTDIR

/usr/qt/3

ls $QTDIR

bin/  doc/  etc/  examples/  include/  lib/  mkspecs/  plugins/  tools/  translations/  tutorial/

```

mentre cercando dove sono state installate le qt4 ho trovato che non sono in un'unica directory, bensì sono "sparpagliate"; ovvero invece di stare tutte quante in un subfolder di qualche directory (ad esempio: /usr/qt/4), stanno in path distinti, quindi le librerie sono in /usr/lib/qt4, mentre gli include stanno in /usr/include/qt4. A questo punto mi chiedo cosa mettere in QTDIR...

Questa situazione (non avere piu' un'unica directory delle qt in cui poi ci sono tutti gli altri subfolder) mi fa pensare che non sia ortodosso procedere con l'overriding di QTDIR, ma a questo punto vorrei sapere se è capitato a qualcun'altro di fare una cosa del genere ed eventualmente se l'ovverriding è bastato(e in quel caso cosa è stato messo in QTDIR), opure in alternativa è necessario modificare a mano le directory: /usr/qt/3/lib e /usr/qt/3/include affinchè puntino ai nuovi folder...quest'ultima soluzione non mi sembra per altro molto gentoo-like direi che è piu' slackware like.  :Smile: 

Infine vorrei sapere sempre a livello dialettico  :Smile:  se esiste un tool integrato che ti permette di scegliere al volo la versione di una libreria/programma ecc da usare;

intendo dire se esiste un tool tipo eselect che ti permette di scegliere (cambiando al volo variabili d'ambiente, ecc) quale versione usare. Ad esempio in php mi pare che faccia una cosa simile php-select settando opportunamente /etc/conf.d/apache2, oppure appunto eselect che, ad esempio, ti switcha al volo tra interfaccia xorg-x11 e ati o (suppongo) nvidia.

grazie a tutti,

fraido

----------

## bender86

Non so se possa funzionare, ma potresti provare a usare la variabile d'ambiente QMAKESPEC. Stando alla documentazione di qmake, contiene il percorso del file qmake.conf che contiene tutte le impostazioni di qmake.

In ogni caso dai un occhio a http://doc.trolltech.com/

----------

## .:chrome:.

secondo me non è possibile scegliere, per il semplice motivo che spesso nei configure dei vari programmi è specificata chiaramente la versione necessaria della tal libreria.

con questo voglio dire che se un programma ti richiede qt3, e tu installi qt4, il programma continuerà a richiederti sempre qt3

i pacchetti come qt sono slotted appunto perché pacchetti diversi possono richiedere dipendenze specifiche diverse

----------

## bender86

 *k.gothmog wrote:*   

> spesso nei configure dei vari programmi è specificata chiaramente la versione necessaria della tal libreria.

 

Penso volesse sapere come fare questo, nei suoi programmi.

----------

## .:chrome:.

 *bender86 wrote:*   

>  *k.gothmog wrote:*   spesso nei configure dei vari programmi è specificata chiaramente la versione necessaria della tal libreria. 
> 
> Penso volesse sapere come fare questo, nei suoi programmi.

 

se era questo, allora bisogna mettere mano al pacchetto, e non è una cosa fattibile tramite l'ebuild. significa alterare il pacchetto originale. e non è per nulla detto che vada a buon fine

----------

## kueitao

Se non sbaglio mi pare di ricordare che la variabile d'ambiente QTDIR sia necessaria solo a KDE per i suoi specifici fini.

Se vuoi usare una versione o l'altra nei TUOI programmi (cioè realizzati da te stesso) devi indicare il PATH delle librarie e degli include in un Makefile apposito oppure, se il progetto non ha Makefile perché magari è di piccole dimensioni, direttamente a linea di comando come opzioni del compilatore (vedi opzioni -I, -L, -l, del GCC).

Cioè, se sei un programmatore, fai in pratica la stessa cosa che avrai già fatto chissà quante volte per riferirti a qualsiasi altra libreria presente nel sistema (escluse le librerie standard del linguaggio che invece sono linkate automaticamente senza particolari opzioni).

Buon lavoro.

fabio

----------

## fraido

ciao a tutti, 

vi ringrazio per le risposte e mi scuso nel contempo x non avervi prontamente risposto, ma l'avvicinarsi della bella stagione si fa sentire  :Wink: 

@bender86:

mmmm ti ringrazio del tips adesso guardo un pò di documentazione al riguardo.

@k.gothmog:

si in effetti hai ragione tu...intendevo proprio compilare un pacchetto software di qualcun'altro con una determinata libreria...ma come fai notare tu, tutto viene specificato nel makefile....speravo si potesse "superare" questo ostacolo. A questo punto mi viene da chiedermi: "e se avessi solo le qt4?". La probabile risposta che mi viene in mente dovrebbe essere: "emerge tenta di installare le qt3 se cerchi di installare un programma che usa le qt3". confermate? La accendiamo?  :Very Happy: 

@bender86:

No a dire la verità ha centrato il problema k.gothmog, ma è colpa mia che mi sono espresso male.   :Embarassed: 

Cmq. sempre per restare in tema di compilazione con le nuove qt, qualcuno ha provato ad usare il nuovo qt designer ed è riuscito a compilare qualcosa con esso? 

Io c'ho provato, ma non a differenza della versione precedente il nuovo designer quando lanci il 

```
qmake -project && qmake *.pro && make
```

 non crea gli header file e così non so cosa includere nel main.cpp. A dirla tutta mi sto informando leggendo il manuale di riferimento, ma non sono due paginette, e quindi serve un pochino di tempo. Qualcuno ha avuto lo stesso problema? 

@kueitao:

Si certo per la compilazione nei programmi che creo io lo sapevo, io mi chiedevo come decidere di compilare un software di altri volendo usare una versione specifica di qt, ma mi sa che ha ragione k.gothmog a questo proposito. Scusate per la domanda posta male. Cmq. ti ringrazio perchè non sapevo che la variabile QTDIR venisse usata solo da kde. E' bella l'informatica perchè si impara sempre qualcosa di nuovo!  :Smile: 

fraido

----------

## randomaze

 *fraido wrote:*   

> La probabile risposta che mi viene in mente dovrebbe essere: "emerge tenta di installare le qt3 se cerchi di installare un programma che usa le qt3". confermate? La accendiamo?  

 

Si.

E, se le Qt non sono slotted (sinceramente, non ricordo) prima tenterà di disinstallarti le Qt4 (oppure te le segnala come pacchetto bloccante)

----------

## fraido

 *randomaze wrote:*   

> Si.
> 
> E, se le Qt non sono slotted (sinceramente, non ricordo) prima tenterà di disinstallarti le Qt4 (oppure te le segnala come pacchetto bloccante)

 

No, no sono slotted...per questo il dubbio di come scegliere con quale compilare...    :Sad: 

fraido

----------

## .:chrome:.

 *fraido wrote:*   

> A questo punto mi viene da chiedermi: "e se avessi solo le qt4?"

 

come pensi tu, ti chiederebbe di emergere anche qt3, per soddisfare le dipendenze.

quei pacchetti, in gentoo, sono slotted proprio per quello

----------

## bender86

 *fraido wrote:*   

> intendevo proprio compilare un pacchetto software di qualcun'altro con una determinata libreria...
> 
> ...
> 
> mi chiedevo come decidere di compilare un software di altri volendo usare una versione specifica di qt

 

Non mi sembra che le qt4 siano retrocompatibili con le qt3 (anche se forse si potrebbe usare il modulo q3support), quindi se un programma è stato sviluppato con le qt3, deve essere compilato con le qt3.

----------

## fraido

 *bender86 wrote:*   

> Non mi sembra che le qt4 siano retrocompatibili con le qt3 (anche se forse si potrebbe usare il modulo q3support), quindi se un programma è stato sviluppato con le qt3, deve essere compilato con le qt3.

 

Si in effetti hai ragione, lo potevo anche capire dal fatto che i miei programmi scritti per le qt3 non funzionano con le 4 e per farli funzionare ho dovuto fare un porting a mano "progetto" per "progetto". Però la mia domanda era così, ad ampio respiro; ovvero intendevo nel caso in cui fossero state compatibili, com'è possibile scegliere visto, ecc ecc... 

Comunque grazie a tutti voi ora la questione è chiara, mi resta da capire se e come è possibile compilare qualcosa con il nuovo designer. 

grazie a tutti.

fraido

P.S.: Se avete suggerimenti per il designer sono ben accetti, altrimenti mi tocca perdermi per un mese nell'infinita documentazione delle nuove qt   :Shocked: 

----------

