2015-02-07 25 views
25

Uso QtCreator per aprire il progetto CMake. Alcune directory oltre a CMakeLists.txt contengono solo i file di intestazioni * .h e per quelle directory QtCreator nella vista ad albero del progetto mostra solo CMakeLists.txt. Come risolverlo? Devo vedere tutti i file di progetto da QtCreator.Progetto QtCreator CMake - come mostrare tutti i file di progetto

risposta

22

La visualizzazione di un progetto come file system non è affatto una soluzione, poiché le impostazioni dell'editor di progetto, ad esempio, non si applicano. E non mi piace aggiungere intestazioni al target eseguibile, perché in realtà non ci appartengono. In effetti, si cripta il file di progetto per funzionare bene con un particolare IDE ... non buono. L'opzione secondo me sarebbe più pulito:

FILE(GLOB_RECURSE LibFiles "include/*.hpp") 
add_custom_target(headers SOURCES ${LibFiles}) 

Come bonus si ottiene il tuo include mostrato in una cartella separata. (preso in prestito da https://cmake.org/pipermail/cmake/2012-August/051811.html)

8

Suggerisco di passare la vista del progetto a File System. Ciò visualizzare una vista dove si poteva visualizzare qualsiasi tipo di file che si desidera:

enter image description here

Si potrebbe desiderare di dividere la vista del progetto in due facendo clic sul secondo pulsante a destra, se si desidera ancora la modalità di Progetti.

+0

Ok, ma quale istruzione nei file CMake fa sì che i file siano visibili nella vista ad albero del progetto? – Irbis

+0

Non sono sicuro, ma ci sono dichiarazioni in CMake che specificano che il codice sorgente probabilmente limita la visualizzazione dell'albero del progetto. alcuni buil La funzione t-in di QtCreator stesso, dubito. –

+4

Sfortunatamente la vista del file è piatta, e quindi non è una sostituzione sufficiente per la vista del progetto. – Zulan

7

Si dovrebbe aggiungere file di intestazione per l'elenco dei file di origine: add_executable(${Executable} ${Sources} ${headers})

È possibile utilizzare GLOB_RECURSE se abbia molti file di intestazione:

FILE(GLOB_RECURSE INC_ALL "headers/*.h") 
include_directories("headers") 
add_executable(main "main.cpp" ${INC_ALL}) 

Non dimenticare di eseguire nuovamente CMake (Build> Esegui Cmake).

+2

[CMake non consiglia ufficialmente] (https://cmake.org/cmake/help/latest/command/file.html) globbing le tue fonti, perché CMake non sarà quindi in grado di rilevare quando deve rigenerarsi in base a file aggiunti, rimossi o rinominati. –

1

Si può provare CMakeProjectManager2. Codice per visualizzare tutti i file già propagati a monte come prova del concetto. Concetto applicato ma il codice non può essere applicato così com'è per alcune ragioni. Quindi, funzionalità di attesa semplice a monte.

1

Sulla base di un'altra discussione che fa la stessa domanda, ho trovato una soluzione generica al problema, funzionante per tutti gli IDE (almeno testati con QtCreator e Visual Studio).

può essere trovato qui: https://github.com/sauter-hq/cmake-ide-support

# \brief adds for the given target a fake executable targets which allows all 
#  headers and symbols to be shown in IDEs. 
# \param target_name Which target properties should be added to the IDE support target. 
function(target_add_ide_support target_name) 
    if (NOT TARGET ${target_name}) 
    message(FATAL_ERROR "No target defined with name ${target_name}, cannot target_add_ide_support it.") 
    endif() 

    set (target_for_ide "${target_name}_ide_support") 
    if (NOT TARGET ${target_for_ide}) 
     file(GLOB_RECURSE target_for_ide_srcs "*.h" "*.hpp" "*.hxx" "*.c" "*.cpp" "*.cxx") 
     add_executable(${target_for_ide} ${target_for_ide_srcs}) 
     set_target_properties(${target_for_ide} PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1) 
    endif() 

    get_target_property(dirs ${target_name} INCLUDE_DIRECTORIES) 
    target_include_directories(${target_for_ide} PRIVATE ${dirs}) 

endfunction(target_add_ide_support) 

L'uso è poi per tutti gli obiettivi nelle CMakeLists, aggiungere la seguente chiamata (può essere fatto in più in alto CMakeLists.txt dopo tutto add_subdirectory:

include(add_ide_support.cmake) 
target_add_ide_support(some-target) 
+1

Ho riscontrato un problema con la soluzione accettata che non è in grado di cercare alcune intestazioni esterne (dalla libreria PointLoud PCL) nei file di intestazione del mio progetto. L'applicazione di questo approccio ha invece risolto il problema. – mikkola

Problemi correlati