C++ cmake将xxd作为自定义命令运行
我有一个C++ cmake将xxd作为自定义命令运行,c++,cmake,embedded-resource,C++,Cmake,Embedded Resource,我有一个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}"
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_命令
中的格式不正确,但仅当输出文件需要作为同一CMakeLists.txt中另一个CMake目标(exe或lib)的源时,才会执行该命令
我会将您的代码片段更改为:
SET(资源\u编译器xxd)
文件(全局递归编译资源“rc/*”)
FOREACH(输入文件${COMPILED\u RESOURCES})
SET(输出文件${INPUT文件}.hex)
添加自定义命令(
输出${OUTPUT_FILE}
命令${RESOURCE\u COMPILER}-i${INPUT\u FILE}${OUTPUT\u FILE}
注释“将${INPUT_FILE}编译为二进制文件”)
列表(附加已编译的_资源${OUTPUT_FILE})
ENDFOREACH()
然后,如果您有另一个目标依赖于${OUTPUT\u FILE}
s,则在构建该目标时将执行该命令:
ADD_EXECUTABLE(MY_EXE main.cc ${COMPILED_RESOURCES})
您可能没有看到输出文件有几个原因。您的xxd命令在
add_custom_命令
中的格式不正确,但仅当输出文件需要作为同一CMakeLists.txt中另一个CMake目标(exe或lib)的源时,才会执行该命令
我会将您的代码片段更改为:
SET(资源\u编译器xxd)
文件(全局递归编译资源“rc/*”)
FOREACH(输入文件${COMPILED\u RESOURCES})
SET(输出文件${INPUT文件}.hex)
添加自定义命令(
输出${OUTPUT_FILE}
命令${RESOURCE\u COMPILER}-i${INPUT\u FILE}${OUTPUT\u FILE}
注释“将${INPUT_FILE}编译为二进制文件”)
列表(附加已编译的_资源${OUTPUT_FILE})
ENDFOREACH()
然后,如果您有另一个目标依赖于${OUTPUT\u FILE}
s,则在构建该目标时将执行该命令:
ADD_EXECUTABLE(MY_EXE main.cc ${COMPILED_RESOURCES})
我在循环中放了一条信息。我观察到没有空间。但是,即使在我用
${RESOURCE\u COMPILER}“-I”${INPUT\u FILE}
修复了这个问题之后,仍然没有生成任何文件。将消息
放在循环中不会给人一个关于add\u custom\u命令
执行的命令的正确印象。所有参数都单独传递给xxd,并适当添加空格。应该不需要执行“-i”
。如果您想检查命令的格式是否正确,可以临时将execute\u进程(command${RESOURCE\u COMPILER}-i${CMAKE\u SOURCE\u DIR}/rc/base.css${CMAKE\u SOURCE\u DIR}/rc/base.css.hex)
添加到CMakeLists.txt中。每次调用cmake时都会运行该命令,并让您查看该命令是否符合您的要求。因此,我是否应该将ADD\u CUSTOM\u命令
替换为execute\u process
?我只需添加execute\u process
以测试命令
参数是否正常工作,然后再次删除它<每次运行CMake时都会调用code>execute\u process,而add\u custom\u命令
需要运行CMake,然后还需要在调用实际的自定义命令之前,根据自定义命令的输出
构建一个目标。这只是检查命令
部分是否格式正确并按预期运行的一种更快的方法。这对我来说是一个救生圈。有两件事,您可以使用find\u program(RESOURCE\u COMPILER xxd)
而不是set
,并将cmake命令的大小写更改为小写。我可以将消息放入循环中。我观察到没有空间。但是,即使在我用${RESOURCE\u COMPILER}“-I”${INPUT\u FILE}
修复了这个问题之后,仍然没有生成任何文件。将消息
放在循环中不会给人一个关于add\u custom\u命令
执行的命令的正确印象。所有参数都单独传递给xxd,并适当添加空格。应该不需要执行“-i”
。如果您想检查命令的格式是否正确,可以临时将execute\u进程(command${RESOURCE\u COMPILER}-i${CMAKE\u SOURCE\u DIR}/rc/base.css${CMAKE\u SOURCE\u DIR}/rc/base.css.hex)
添加到CMakeLists.txt中。每次调用cmake时都会运行该命令,并让您查看该命令是否符合您的要求。因此,我是否应该将ADD\u CUSTOM\u命令
替换为execute\u process
?我只需添加execute\u process
以测试命令
参数是否正常工作,然后再次删除它<每次运行CMake时都会调用code>execute\u process,而add\u custom\u命令
需要运行CMake,然后还需要在调用实际的自定义命令之前,根据自定义命令的输出
构建一个目标。这只是检查命令
部分是否格式正确并按预期运行的一种更快的方法。这对我来说是一个救生圈。有两件事,您可以使用find\u program(RESOURCE\u COMPILER xxd)
代替set
,并将cmake命令的大小写改为小写