2013-08-25 10 views
10

Sto tentando di aggiungere un passaggio personalizzato in CMake che genera alcuni file. Non ho trovato una descrizione di come funziona.Aggiungi passaggio personalizzato in CMake

Ho un progetto in cui la sorgente, i file di implementazione dell'intestazione & devono essere generati da ODB per C++. ODB prende le intestazioni di classe come argomenti e genera i file di origine che voglio usare nel mio progetto.

In questo momento ho il seguente comando nel mio CMakeLists.txt:

add_custom_command(TARGET ${PROJECT_NAME} 
    PRE_BUILD 
    COMMAND odb -o /home/david/dev/ --std c++11 -I/home/david/dev/ -d sqlite --generate- query --generate-schema ${PROMOTER_LIB_PREFIX}/entities/person.hpp 
    DEPENDS ${PROJECT_NAME} 
    VERBATIM 
) 

Per un file person.hpp ODB dovrebbe generare person-odb.hxx, person-odb.cxx, person-odb.ixx ma il comando CMake I''ve utilizzato non genera nulla . In un terminale questo comando funziona bene.

Cosa sto sbagliando?

EDIT: Il problema può essere risolto aggiungendo le seguenti righe:

set(FAKE_TARGET fakeTarget) 
add_custom_target(fakeTarget 
    odb -o /home/david/dev/ --std c++11 -I/home/david/dev/ -d sqlite --generate-query --generate-schema ${PROMOTER_LIB_PREFIX}/entities/person.hpp 
) 
add_dependencies(${PROJECT_NAME} ${FAKE_TARGET}) 

risposta

14

Per me, con qualcosa di simile, mi basta usare:

add_custom_command(TARGET ${PROJECT_NAME} 
    PRE_BUILD 
    COMMAND odb -o /home/david/dev/ --std c++11 -I/home/david/dev/ -d sqlite --generate- query --generate-schema ${PROMOTER_LIB_PREFIX}/entities/person.hpp 
) 

non usiamo DEPENDS oppure VERBATIM.

L'opzione DEPENDS specifica che il comando deve essere eseguito solo dopo che il progetto che hai assegnato a questa opzione è stato creato.

EDIT:

Si noti che l'opzione PRE_BUILD è supportata solo su Visual Studio 7 o versione successiva. Per tutti gli altri generatori PRE_BUILD sarà trattato come PRE_LINK.

Forse è per questo che non funziona per voi.

un lavoro in giro potrebbe essere (un po 'brutto):

  • Creare un progetto finto
  • Aggiungi il comando personalizzato su di esso come POST_BUILD
  • farvi progetto in corso dipende dal falso uno
+0

Ancora non funziona quando cancello 'DEPENDS' e' VERBATIM'. –

+0

@DavidBulczak guarda la mia modifica. Uso VS al lavoro, ecco perché funziona per me. –

+0

Ok. Grazie. Io uso gcc/make e altri strumenti GNU. Ci sono altri modi per aggiungere passi pre-compilati personalizzati in CMake? –

1

Way sto usando è:

add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/gen_icinstrtab.hpp 
    COMMAND xsltproc --output ${CMAKE_CURRENT_BINARY_DIR}/gen_icinstrtab.hpp ${CMAKE_SOURCE_DIR}/xml/genictabc.xslt ${CMAKE_SOURCE_DIR}/xml/icminstr.xml 
) 

add_executable(
    du4 

    ${CMAKE_CURRENT_BINARY_DIR}/gen_icinstrtab.hpp 
    . 
    . 
    . 
) 

La chiave era di aggiungere anche file .hpp nel blocco add_executable.

Problemi correlati