Russian Qt Forum
Ноябрь 27, 2024, 05:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено]CMake. Не работает add_custom_command.  (Прочитано 11998 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Октябрь 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 для простоты.

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

 В замешательстве
« Последнее редактирование: Октябрь 07, 2010, 13:27 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
igor_bogomolov
Гость
« Ответ #1 : Октябрь 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})
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Октябрь 07, 2010, 11:39 »

Ну а мой пример заработает у Вас?

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

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

в директории для сборки нет ни в одном файле (кеши и пр.) упоминания о messages.log.
Такое впечатление что CMake вообще игнорирует add_custom_command !  Злой
« Последнее редактирование: Октябрь 07, 2010, 11:44 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
igor_bogomolov
Гость
« Ответ #3 : Октябрь 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?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #4 : Октябрь 07, 2010, 12:00 »

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

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

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

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

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

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

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Октябрь 07, 2010, 12:19 »

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

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

ArchLinux x86_64 / Win10 64 bit
igor_bogomolov
Гость
« Ответ #6 : Октябрь 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
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #7 : Октябрь 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!!!

Спасибо!  Улыбающийся
« Последнее редактирование: Октябрь 07, 2010, 13:31 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.08 секунд. Запросов: 22.