Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cmake将xxd作为自定义命令运行_C++_Cmake_Embedded Resource - Fatal编程技术网

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命令的大小写改为小写