2013-11-27 15 views
6

Questa domanda è più o meno un riscaldamento di questa domanda:È possibile aggiungere file in una cartella della soluzione generata da CMake in Visual Studio?

how to get cmake to add files to msvcs solution tree

E non ha mai avuto una risposta valida quindi voglio riposare leggermente diverso:

E 'possibile utilizzare la soluzione cmake cartelle che sono state introdotte con cmake 2.8.3 per aggiungere file direttamente alla soluzione vs? Voglio fare l'equivalente cmake di VS-> Solution-> Add-> Existing Item. Quindi il mio file apparirà in una cartella che appartiene alla soluzione e non a un progetto.

ho trovato esempi di come le cartelle soluzione può essere utilizzata per gli obiettivi di gruppo in cartelle con il codice come questo:

set_property(GLOBAL PROPERTY USE_FOLDERS ON) 
set_property(TARGET ${TARGET_NAME} PROPERTY FOLDER "Test") 

Così posso aggiungere un file invece di un bersaglio nella cartella?

risposta

6

Questo probabilmente non è possibile.

CMake organizza le sue attività in progetti e obiettivi. Il progetto è ciò che corrisponde al file di soluzione di Visual Studio mentre ogni target genererà un progetto di Visual Studio all'interno della rispettiva soluzione.

Il problema è ora che CMake non consente di aggiungere file ai progetti CMake. In effetti, un progetto CMake è poco più di una raccolta di obiettivi e offre quasi opzioni di personalizzazione. Quindi l'opzione USE_FOLDERS menzionata può essere utilizzata solo per raggruppare progetti VS all'interno di una soluzione, ma non per singoli file.

Il più vicino a quello che chiedi sarebbe probabilmente quello di aggiungere uno custom target che contiene i tuoi file. Tuttavia, questo genererà comunque un progetto VS (che contiene anche una serie di altre cose oltre ai file) all'interno della soluzione e non una cartella semplice.

+0

Grazie per la rapida risposta. Ti voterei, ma sono un uomo di bassa reputazione. Qual è il modo comune di aggiungere file globali come macro cmake al progetto/soluzione? – Knitschi

+0

Non esiste un modo "migliore" per farlo. CMake tende a mettere tutti i file relativi a un target nel progetto VS di quel target: ad esempio, ogni progetto VS contiene sempre il CMakeLists.txt che è stato usato per crearlo, anche se questo porta allo stesso CMakeLists.txt che appare più volte in la soluzione. Quindi, se hai scelto un approccio simile che sarebbe almeno coerente. A seconda della natura dei tuoi file e del tuo flusso di lavoro personale, una diversa forma di organizzazione dei file potrebbe avere più senso. Ad esempio, personalmente non ho mai modificato i file CMake da VS, quindi non li includo affatto. – ComicSansMS

+0

Anche io lo facevo, ma recentemente ho installato il plugin per l'evidenziazione della sintassi cmake per VS e ora modifico i file in VS. Credo che userò l'approccio "include i file globali in tutti i target" con una cartella aggiuntiva nella destinazione che contiene i file. – Knitschi

1

Se ho capito bene la questione, penso di sapere come farlo:

set(FILES_TO_ADD 
    file1 
    file2 
    file3) 

source_group("Group Name" FILES ${FILES_TO_ADD}) 

Il comando source_group crea la cartella all'interno del progetto di Visual Studio.

+0

No Volevo creare una cartella sul livello di eliminazione di Visual Studio. Come hai detto, il tuo suggerimento crea una cartella sotto il progetto Visual Studio. Volevo creare una cartella per i file che non appartengono davvero a nessun obiettivo, come i file che contengono funzioni CMake o macro globali, ecc ... Nella GUI VS è possibile aggiungere elementi alla soluzione e creerà una cartella denominata "Soultion" Elementi". Questo è quello che volevo ottenere con CMake, ma ho fallito – Knitschi

0

Questa risposta aggiunge solo un esempio per la soluzione "target personalizzato" che è stata proposta da ComicSansMS nella risposta accettata. Questo è quello che attualmente uso per aggiungere i miei file globali.

set(SOLUTION_FILES 
    ${CMAKE_SOURCE_DIR}/CMakeLists.txt    # root CMakeLists file 
    ${CMAKE_SOURCE_DIR}/cmake/macros.cmake   # cmake functions 
    ${CMAKE_SOURCE_DIR}/CMakeInCodeDefinitions.h.in # imported cmake variables 
    # etc... 
) 

add_custom_target(GlobalFiles SOURCES ${SOLUTION_FILES}) 
Problemi correlati