c++ - cmake 运行 xxd 作为自定义命令

标签 c++ cmake embedded-resource

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

我正在检查一些 answer在 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 中的另一个 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} 的目标,则该命令将在构建该目标时执行:

ADD_EXECUTABLE(MY_EXE main.cc ${COMPILED_RESOURCES})

关于c++ - cmake 运行 xxd 作为自定义命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14422507/

相关文章:

c++ - CMake:创建二进制 foo + 库 libfoo?

java - 指定使用 Jar 内文件的参数

vb.net - 根据嵌入 VB.NET 资源的路径自动添加命名空间

c++ - firebreath 中的 IPC (boost c++)

c++ - 提高C++编译速度的最佳方法

c++ - 为 Windows Phone 8.1 商店应用程序 (WinRT) 构建 unqlite

c++ - CMake 包含目录冲突

Java Swing : unable to load image using getResource

c++ - 图像处理术语 : Bit Depth

c++ - 通过weak_ptr创建单例类是否正确