2009-08-25 3 views
1

Je démarre un projet multiplateforme (Win Xp, Linux) qt. Je veux utiliser une sortie de construction source donc ma structure de répertoire est comme suit:Inclure des problèmes lors de l'utilisation de CMake avec Gnu sur le projet Qt

project/ 
    CMakeLists.txt (global CMake file, includes other CMakeLists) 
    build/   (my build directory) 
    libA/ 
    CMakeLists.txt 
    mystuff/ 
    subprojectA/ 
     CMakeLists.txt 
    subprojectB/ 
     CMakeLists.txt 

Alors, quand j'utiliser sur Windows avec le générateur Visual Studio tout se construit bien. Si j'utilise la même structure et CMakeLists sous Linux ou sous Windows avec le générateur MinGW, j'obtiens des erreurs de compilation car les fichiers qt générés (via moc et uic) situés dans le répertoire build ne trouvent pas mes fichiers d'en-tête dans mes sous-projets. Certains des fichiers d'en-tête/source générés par qt dépendent de mes fichiers d'en-tête/source parce que j'utilise des widgets promus dans mes fichiers .ui qui pointent vers l'implémentation dans ma source. Encore une fois sous Visual Studio/NMake tout compile bien.

Pour contourner ce problème, je peux utiliser une source de construire dans ce qui fonctionne bien ou je peux ajouter ce qui suit sur la CMakeLists.txt mondiale:

include_directories(
    mystuff/subprojectA 
    mystuff/subprojectB 
) 

Mais quelle est la bonne solution? Merci beaucoup!!

Répondre

2

J'ai un problème similaire, comprend pour de la source repose sur unix (bien que je ne l'utilise QT), et dans chaque Effectuée projetée j'ajouté:

include_directories(.) 

Pas le plus élégant, mais je travaillais pour moi.

+0

hey cool ça marche pour moi! pas la réponse parfaite mais une bonne solution de contournement, merci! –

1

Dans un projet, je travaille sur cette déclaration que j'utiliser pour gérer mon assortit CMakeLists.txt:

include_directories(${CMAKE_CURRENT_BINARY_DIR} ${QT_INCLUDES} ${OPENSSL_INCLUDE_DIR}) 

Le mot-clé est $ {} CMAKE_CURRENT_BINARY_DIR, l'espoir qui aide.

Remarque secondaire, si vous utilisez gcc 4.4.x avec les exceptions activées, vous pouvez utiliser ceci afin qu'il ne soit pas lié à libgcc_s_sjlj-1.dll sous Windows.

SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "-static-libgcc") 
+0

Non, je ne veux pas inclure mes fichiers moc (ce que je fais déjà) et ainsi de suite, mais mes fichiers moc doivent inclure certains fichiers (de mes sous-projets) car j'utilise des widgets promus dans les fichiers .ui . Donc, la réponse de iain résout mon problème. –

Questions connexes