Ho un progetto con alcune cartelle che contengono i file di origine con gli stessi nomi.Qmake: evitare conflitti di nomi di file in diverse cartelle senza introdurre librerie
Il mio albero fonte assomiglia a questo:
project.pro
foo/
conflict.h
conflict.cpp
bar/
conflict.h
conflict.cpp
some.h
other.h
files.h
main.cpp
Per impostazione predefinita, qmake genera un Makefile che produrrà un albero di build come questa:
conflict.o
main.o
target
Dove conflict.o
è il file oggetto risultante per entrambi foo/conflict.cpp
e foo/conflict.h
.
Non riesco a cambiare i loro nomi perché vengono generati utilizzando uno strumento esterno e forzando nomi di file diversi implicherebbe di modificare il loro contenuto, quindi questa non è un'opzione.
anche io non voglio usare qmake SUBDIRS
modello, perché questo implicherebbe che (1) ogni sottodirectory è costruito separatamente come una biblioteca, e quindi molto complicare il processo di costruzione complessivo (ai miei occhi almeno) e (2) nella directory di livello superiore non posso avere alcun file sorgente. O mi sbaglio?
Non posso semplicemente dire a qmake di scrivere i file oggetto in directory separate all'interno della directory di build? Quindi il mio albero di compilazione sarà simile a questa:
foo/
conflict.o
bar/
conflict.o
main.o
target
o ci sono altre soluzioni che richiedono né per rinominare i file di origine, né l'introduzione di qualcosa di complicato come librerie statiche? Non riesco a credere che Qt non abbia risolto questo problema (ai miei occhi semplici) per anni. (Ho già risolto questo problema 4 anni fa ma potrei rinominare i file in quel progetto, mentre qui non posso.)
Se è importante: utilizzo Qt 4.8 sia su Ubuntu con G ++ che su Windows con mingw32.
Non è possibile. –
@NikosC. Posso avere un file pro per i file di livello superiore che collegheranno con le altre librerie + un file SUBDIRS pro di livello superiore che avrà la sottodirectory '.'? Ciò richiederebbe anche la sovrascrittura del file .pro perché questo sottodir sia diverso dal file .pro di livello superiore per l'intera app. Spero tu capisca quello che intendo. Voglio solo evitare di spostare tutti i file di livello superiore in una sottodirectory fisica. – leemes
Probabilmente dovresti usare solo un file di progetto aggiuntivo per 'foo', e mantenerne uno esistente per la directory principale e' bar'. Un'altra opzione consiste nel collegare simbolicamente il nome file in conflitto: 'ln -s bar/conflict.cpp bar/conflict_bar.cpp' e quindi utilizzare il collegamento simbolico nel file di progetto. –