cmake将xxd作为自定义命令运行

时间:2013-01-20 07:19:05

标签: c++ cmake embedded-resource

我有一个rc目录我希望在该目录中递归运行xxd -i filename。并将生成的文件添加到我的项目中。

我正在检查lua上的一些answer。我以类似的方式做到了。

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()

但我根本看不到任何文件。

1 个答案:

答案 0 :(得分:1)

有几个原因可能导致您无法看到输出文件。您的xxd命令在add_custom_command中格式不正确,但只有在同一个CMakeLists.txt中另一个CMake目标(exe或lib)中需要输出文件作为源时,才会执行该命令。 / p>

我会将您的代码段更改为:

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}的目标,那么在构建目标时将执行该命令:

ADD_EXECUTABLE(MY_EXE main.cc ${COMPILED_RESOURCES})