2013-08-25 25 views
10

Próbuję dodać niestandardowy krok kompilacji w CMake, który generuje niektóre pliki. Nie znalazłem opisu, jak to działa.Dodaj niestandardowy krok kompilacji w CMake

Mam projekt, w którym pliki źródłowe, nagłówkowe & muszą być generowane przez ODB dla C++. ODB pobiera nagłówki klas jako argumenty i generuje pliki źródłowe, które chcę użyć w moim projekcie.

Teraz mam następujące polecenie w moim 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 
) 

dla pliku person.hpp ODB powinien generować person-odb.hxxperson-odb.cxx, person-odb.ixx, ale polecenie CUpewnij I''ve używany niczego nie wytwarzają . W terminalu to polecenie działa dobrze.

Co robię źle?

EDIT: Problem można rozwiązać dodając następujące linie:

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}) 

Odpowiedz

14

dla mnie coś podobnego, po prostu użyć:

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 
) 

Nie używamy DEPENDS lub VERBATIM.

Opcja DEPENDS określa, że ​​polecenie musi zostać wykonane dopiero po zbudowaniu projektu, który dałeś tej opcji.

EDIT:

Uwaga że opcja PRE_BUILD jest obsługiwana tylko w Visual Studio 7 lub nowszego. Dla wszystkich innych generatorów PRE_BUILD będzie traktowany jako PRE_LINK.

Może dlatego nie działa dla Ciebie.

Dzieło wokół może być (trochę brzydki):

  • Tworzenie fałszywych projekt
  • Dodaj swoje polecenia niestandardowego na nim jako POST_BUILD
  • Make you obecny projekt zależy od fałszywych jeden
+0

To nadal nie działa, gdy usuwam "ZALEŻA" i "WERBATIM". –

+0

@DavidBulczak spójrz na moją edycję. Używam VS w pracy, dlatego to działa dla mnie. –

+0

Ok. Dzięki. Używam gcc/make i innych narzędzi GNU. Czy istnieją inne sposoby dodawania niestandardowych kroków wstępnej kompilacji w programie CMake? –

1

Way Używam go jest:

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 
    . 
    . 
    . 
) 

Kluczem było dodanie nawet plików .hpp do bloku add_executable.

Powiązane problemy