将XXD作为自定义命令运行

cmake run xxd as custom command

本文关键字:命令 运行 自定义 XXD      更新时间:2023-10-16

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

我正在检查lua上的一些答案。我也用了类似的方法。

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

但是我没有看到任何文件生成

看不到输出文件的原因可能有几个。您的xxd命令在add_custom_command中没有很好地形成,但该命令仅在输出文件需要作为同一CMakeLists.txt中的另一个CMake目标(exe或lib)的源时才会执行。

我将把您的代码片段修改为:

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