2011-12-26 8 views
6

Mam coś takiego w moim projekcie:Postpone podejmowania niestandardowych cel aż zainstalować

add_custom_command(OUTPUT somefile) 
add_custom_target(tgt ALL DEPENDS somefile) 

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/somefile DESTINATION somedir) 

to działa OK, ale moje polecenie jest uruchamiane podczas make powodu ALL kluczowe w add_custom_target(). Chcę tylko, aby CMake uruchamiał to polecenie tylko wtedy, gdy zostanie wydane make install, a nie podczas kompilacji.

Po usunięciu WSZYSTKIEGO słowa kluczowego cały cel nie jest budowany domyślnie, więc plik nie został utworzony i nie powiodło się make install.

Odpowiedz

8

Możliwe jest, aby polecenie make install wywołać efekt make tgt jako skutek uboczny. Można to zrobić za pomocą polecenia CODE podpis na install:

add_custom_command(OUTPUT somefile) 
add_custom_target(tgt DEPENDS somefile) 

install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" --build \"${CMAKE_CURRENT_BINARY_DIR}\" --target tgt)") 
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/somefile DESTINATION somedir) 

execute_process wywołuje cmake do budowania cel tgt przed zainstalowaniem somefile.

Powiązane problemy