2013-07-23 2 views
1

В настоящее время я пытаюсь установить проект CMake с двумя исполняемыми файлами, одна из которых - простая утилита, используемая для генерации кода для другого. Соответствующие биты CMakeLists.txt:add_custom_command from another target

add_executable(lua2c lua2c.c) 
add_custom_command(OUTPUT lcode.c COMMAND lua2c lcode.lua lcode.c MAIN_DEPENDENCY lua2c) 
... 
add_executable(darpem ... lcode.c) 

С помощью этой установки, цель lua2c ветров с какими-либо зависимостями, что вызывает cc жаловаться без входных файлов. Если я удаляю строку add_custom_command, то lua2c построен правильно, но, очевидно, не генерирует файл lcode.c. Возможно ли это в CMake? Должен ли я добавить зависимую от подкаталога сортировку?

Использование CMake версии 2.8.1 на Ubuntu 13.04, x86-64.

ПРИМЕЧАНИЕ: Для моего конкретного случая, поскольку lua2c достаточно прост, я могу использовать другой язык. Однако мне все еще интересно, как это возможно (для более сложных настроек).

ответ

2

Из документации:

Обратите внимание, что MAIN_DEPENDENCY является обязательным и используется в качестве предложения визуальной студии о том, куда повесить пользовательскую команду.

Может быть, это должно решить проблему:

add_executable(lua2c lua2c.c) 
add_custom_command(OUTPUT lcode.c COMMAND lua2c lcode.lua lcode.c DEPENDS lua2c) 
#                 ^^^^^^^ 
... 
add_executable(darpem ... lcode.c) 

Или, если он не работает, это один должен работать:

add_executable(lua2c lua2c.c) 
add_custom_command(TARGET lua2c 
        POST_BUILD 
        COMMAND lua2c lcode.lua lcode.c) 

... 
add_executable(darpem ... lcode.c) 
add_dependencies(darpem lua2c) 

Это просто добавить событие после сборки после сборки от lua2c. И он добавляет lua2c как зависимость от darpem.

+0

Я до сих пор не вижу, как это влияет на зависимости 'lua2c', если только CMake не оптимизирует его, но это работает - спасибо! –

+0

@DrewMcGowen В вашем примере команда была выполнена во время сборки 'lua2c'. Таким образом, в настоящее время двоичный файл lua2c не существует. Вот почему вы должны добавить зависимости где-нибудь, чтобы заставить сборку lua2c прежде всего чем-либо еще. –