2010-11-19 11 views
5

Nel mio progetto ho un file "schema" e un'utilità che ho scritto per generare un file di intestazione. Sto usando cmake e la build di origine per creare l'applicazione.Come generare un'intestazione nella sorgente con cmake?

Attualmente devo rigenerare manualmente il file di intestazione quindi creare l'applicazione.

Quindi ho trovato queste istruzioni CMakeLists.txt, ma esse generano l'intestazione nella directory di build anziché nella directory di origine.

configure_file(generator.pl generator COPYONLY) 
configure_file(schema.txt.in schema.txt COPYONLY) 
add_custom_command(
    OUTPUT generated.h 
    COMMAND ./generator schema.txt generated.h 
    DEPENDS mib_schema.txt.in generator.pl 
    COMMENT "Regenerating header file..." 
) 

È possibile generare l'intestazione nella directory di origine?

di modifica (in modo da riflettere la risposta):

Il file può essere raggiunto direttamente da qualificare pienamente il suo percorso sia con

${CMAKE_CURRENT_SOURCE_DIR} 

o:

${CMAKE_CURRENT_BINARY_DIR} 

Così, per generare l'intestazione nella mia directory di origine, l'estratto precedente da CMakeLists.txt diventa:

add_custom_command(
    OUTPUT generated.h 
    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generator.pl ${CMAKE_CURRENT_SOURCE_DIR}/schema.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/generated.h 
    DEPENDS mib_schema.txt.in generator.pl 
    COMMENT "Regenerating header file..." 
) 

che è in realtà più semplice. Grazie

--to

+0

Questo è in realtà una buona idea. Se posso salvare il file generato nella directory sorgente, viene incluso nel pacchetto sorgente che è esattamente quello che voglio (perché in questo modo gli utenti della mia libreria non hanno bisogno di generare il file finché non modificano il generatore e/o il file di dati di origine). Ciò significa che più persone possono compilare la mia libreria! –

risposta

5

Penso che intestazione generato sono ben inserito nella directory binaria, dal momento che si potrebbe desiderare di creare per costruire le directory con la stessa sorgente e diverse configurazioni con conseguente diversa intestazione generato.

Si potrebbe voler includere la directory di compilazione al progetto:

include_directories(${CMAKE_CURRENT_BINARY_DIR}) 
+0

Se CMake ha problemi nel trovare il file, quindi definiscili completamente con '$ {CMAKE_CURRENT_BINARY_DIR}'. Se sei sicuro di voler creare i tuoi file nella directory sorgente, puoi anche usare '$ {CMAKE_CURRENT_SOURCE_DIR}' nei comandi 'configure' e' add_custom_command'. – tibur

+0

Sono d'accordo, il posto migliore per i file generati è nella directory di costruzione. Questa intestazione è utile nella directory di origine perché fornisce un utile completamento del codice durante la codifica. È la stessa intestazione per tutte le configurazioni di build, quindi averlo nella directory di origine non è affatto dannoso. NB: ho problemi con la modifica dei commenti, probabilmente perché sono su una rete di grandi dimensioni che contiene un IP univoco. Dispiace per la confusione. – amso

Problemi correlati