Russian Qt Forum

Программирование => Общий => Тема начата: kuzulis от Октябрь 07, 2010, 10:56



Название: [Решено]CMake. Не работает add_custom_command.
Отправлено: kuzulis от Октябрь 07, 2010, 10:56
Доброго времени суток.

Бьюсь с CMake (cmake version 2.6-patch 4) под Windows.

Упорно не хочет отрабатывать add_custom_command!!

Кусок примера:
Цитировать
...
set( LOG_FILE ${CMAKE_CURRENT_BINARY_DIR}/messages.log )

add_custom_command( OUTPUT ${LOG_FILE}
                    COMMAND ipconfig > ${LOG_FILE}
)
...

Я уже перепробовал различные варианты в команд в поле COMMAND и ни одна не работает..
Я остановился для примера на команде: ipconfig для простоты.

В чем может быть проблема?

 :-\


Название: Re: CMake. Не работает add_custom_command.
Отправлено: igor_bogomolov от Октябрь 07, 2010, 11:30
У меня всё прекрасно работает. Делаю примерно так

Код
Bash
add_custom_command(OUTPUT version.h COMMAND ${SRC_PATH}/addversion.sh)
set(VERSION version.h)
...
add_executable(${TARGET} ${HEDARS} ${SOURCES} ... ${VERSION})


Название: Re: CMake. Не работает add_custom_command.
Отправлено: kuzulis от Октябрь 07, 2010, 11:39
Ну а мой пример заработает у Вас?

Правда для *.nix изменить его чуть чуть нужно (поменять команду на ifconfig к примеру)

Странно как-то... После выполнения:
Цитировать
#cmake ../
#make

в директории для сборки нет ни в одном файле (кеши и пр.) упоминания о messages.log.
Такое впечатление что CMake вообще игнорирует add_custom_command !  >:(


Название: Re: CMake. Не работает add_custom_command.
Отправлено: igor_bogomolov от Октябрь 07, 2010, 11:49
Ну а мой пример заработает у Вас?
Да, работает. Делал так

Код
Bash
set(LOG_FILE ${CMAKE_CURRENT_BINARY_DIR}/messages.log )
add_custom_command(OUTPUT ${LOG_FILE} COMMAND ifconfig > ${LOG_FILE})
add_executable(${TARGET} ${HEDARS} ${SOURCES} ${Q_HEDARS} ${Q_SOURCES} ${MOC_SOURCES} ${UI_HEADERS} ${QRC_SOURCES} ${RC_SOURCES} ${VERSION} ${LOG_FILE})

Ты цель не забыл добавить в add_executable или add_library?


Название: Re: CMake. Не работает add_custom_command.
Отправлено: kuzulis от Октябрь 07, 2010, 12:00
Цитировать
Ты цель не забыл добавить в add_executable или add_library?

Хм.. странно... все это.. очень странно..

После того как в add_executable я добавил ${LOG_FILE} то оно заработало! о_О
Ппц.. 

Но мне не  нужно добавлять результат выполнения команды в какие-то цели!
Мне просто нужно получить сгенерированные файлы и перенести их туда куда мне нужно,
т.е. не нужно их ни линковать ни что либо иное делать... Не понимаю причем тут цель?!  :-\

Брр.... непонятно.

----
Игорь, спасибо за помощь! 


Название: Re: CMake. Не работает add_custom_command.
Отправлено: kuzulis от Октябрь 07, 2010, 12:19
Но добавление к add_executable или add_library это не выход., т.к. например у меня в есть поддиректория в которой хранятся исходники переводов(локализаций) и их нужно с помощью add_custom_command преобразовать в бинарики (не ts->qm!!!).

И в этом случае не получается использовать add_custom_command.


Название: Re: CMake. Не работает add_custom_command.
Отправлено: igor_bogomolov от Октябрь 07, 2010, 13:01
Всё получится :). Если тебя смущает add_executable / add_library, можешь сделать так
Код
Bash
set(LOG_FILE ${CMAKE_CURRENT_BINARY_DIR}/messages.log )
add_custom_command(OUTPUT ${LOG_FILE} COMMAND ifconfig > ${LOG_FILE})
add_custom_target(log ALL DEPENDS ${LOG_FILE})
Тогда твоя команда будет исполняться как во время обычной компиляции, т.е. запуска make без параметров, а так же, ты сможешь отдельно выполнить свою команду при помощи make log


Название: Re: CMake. Не работает add_custom_command.
Отправлено: kuzulis от Октябрь 07, 2010, 13:26
Уф.. все получилось, сделал так:

Цитировать
set(LOG_FILE ${CMAKE_CURRENT_BINARY_DIR}/messages.log )
add_custom_target(log ALL DEPENDS)
add_custom_command(TARGET log COMMAND ifconfig > ${LOG_FILE})

Замечание: Важно чтобы add_custom_target был выше чем add_custom_command!!!

Спасибо!  :)