cmake запускает xxd как пользовательскую команду

У меня есть rc каталог, который я хочу запустить xxd -i filename рекурсивно в этом каталоге. и добавить сгенерированные файлы в мой проект.

Я проверял некоторые ответ на Луа. и я сделал это аналогичным образом.

SET(RESOURCE_COMPILER "xxd")
SET(COMPILED_RESOURCES "rc/base.css rc/common.js")
FOREACH(F ${COMPILED_RESOURCES})
ADD_CUSTOM_COMMAND(
OUTPUT "${COMPILED_RESOURCES}/${F}"COMMAND ${RESOURCE_COMPILER} -i "${COMPILED_RESOURCES}/${F}"COMMENT "Compiling ${F} to binary")
LIST (APPEND COMPILED_RESOURCES "${COMPILED_RESOURCES}/${F}")
ENDFOREACH()

но я не вижу никакого файла, сгенерированного вообще.

0

Решение

Есть несколько причин, по которым вы можете не видеть выходные файлы. Ваша команда xxd плохо сформирована в add_custom_command, но команда также будет выполняться только в том случае, если выходной файл требуется в качестве источника в другой цели CMake (exe или lib) в том же CMakeLists.txt.

Я бы изменил ваш фрагмент на что-то вроде:

SET(RESOURCE_COMPILER xxd)
FILE(GLOB_RECURSE COMPILED_RESOURCES "rc/*")
FOREACH(INPUT_FILE ${COMPILED_RESOURCES})
SET(OUTPUT_FILE ${INPUT_FILE}.hex)
ADD_CUSTOM_COMMAND(
OUTPUT ${OUTPUT_FILE}
COMMAND ${RESOURCE_COMPILER} -i ${INPUT_FILE} ${OUTPUT_FILE}
COMMENT "Compiling ${INPUT_FILE} to binary")
LIST(APPEND COMPILED_RESOURCES ${OUTPUT_FILE})
ENDFOREACH()

Тогда, если у вас есть другая цель, которая зависит от ${OUTPUT_FILE}s команда будет выполнена, когда эта цель строится:

ADD_EXECUTABLE(MY_EXE main.cc ${COMPILED_RESOURCES})
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector