Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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++ 如何在执行过程中使用文件结果(全局递归)?_C++_Cmake - Fatal编程技术网

C++ 如何在执行过程中使用文件结果(全局递归)?

C++ 如何在执行过程中使用文件结果(全局递归)?,c++,cmake,C++,Cmake,我现在被CMake弄得精神崩溃。首先让我向您展示我正在进行的工作: FILE( GLOB_RECURSE FLATBUFFER_SRC "*.fbs" ) STRING( REPLACE ";" " " FLATBUFFER_SRC_STR "${FLATBUFFER_SRC}" ) SET( FLATC_COMMAND "flatc --cpp --gen-mutable -o ${META_INSTALL_LOCATION} ${FLATBUFFER_SRC_STR}" ) MESSAGE

我现在被CMake弄得精神崩溃。首先让我向您展示我正在进行的工作:

FILE( GLOB_RECURSE FLATBUFFER_SRC "*.fbs" )
STRING( REPLACE ";" " " FLATBUFFER_SRC_STR "${FLATBUFFER_SRC}" )

SET( FLATC_COMMAND "flatc --cpp --gen-mutable -o ${META_INSTALL_LOCATION} ${FLATBUFFER_SRC_STR}" )
MESSAGE( STATUS "${FLATC_COMMAND}" )

EXECUTE_PROCESS(
        COMMAND ${FLATC_COMMAND}
        RESULT_VARIABLE OUT
)

IF ( NOT ${OUT} EQUAL "0" )
    MESSAGE( STATUS "COMMAND EXIT WITH: ${OUT}" )
    MESSAGE( STATUS "META_INSTALL_LOCATION: ${META_INSTALL_LOCATION}" )
    MESSAGE( STATUS "FLATBUFFER_SRC_STR: ${FLATBUFFER_SRC_STR}" )
    MESSAGE( FATAL_ERROR "flatc has FAILED gracefully" )
ENDIF ()

这是一个输出:

——flatc--cpp--gen mutable-o/home/black/Work/hubris/meta/home/black/Work/hubris/cmake build debug/meta prefix/src/meta/fbs/game/base.fbs/home/black/Work/hubris/cmake build debug/meta prefix/src/meta/fbs/game/util/vec.fbs
--配置完成
--命令退出:没有这样的文件或目录
--META\u安装位置:/home/black/Work/hubris/META
--FLATBUFFER_SRC_STR:/home/black/Work/hubris/cmake build debug/META prefix/SRC/META/fbs/game/base.fbs/home/black/Work/hubris/cmake build debug/META prefix/SRC/META/fbs/game/util/vec.fbs
CMakeLists.txt:20处的CMake错误(消息):
弗拉特失败了
虽然我的问题是“为什么它不起作用?”并且它将保持不变,但我希望了解CMake的方法。在shell打印命令中运行时:

flatc --cpp --gen-mutable -o /home/black/Work/hubris/meta /home/black/Work/hubris/cmake-build-debug/META-prefix/src/META/fbs/game/base.fbs /home/black/Work/hubris/cmake-build-debug/META-prefix/src/META/fbs/game/util/vec.fbs
它就像一场梦。我真的很困惑,浪费了很多时间。 谁能向我解释一下,我做错了什么?

文件(GLOB\u RECURSE)的结果是一个列表,当您为
命令指定参数时,CMake正好需要一个列表。因此,只需将此列表传递给
execute\u process
,无需任何修改和引用:

或者,通过删除中间
FLATC_命令
变量:

FILE( GLOB_RECURSE FLATBUFFER_SRC "*.fbs" )

EXECUTE_PROCESS(
        COMMAND flatc --cpp --gen-mutable -o ${META_INSTALL_LOCATION} ${FLATBUFFER_SRC}
        RESULT_VARIABLE OUT
)

不要为
FLATC_命令
变量引用整个值。这与在shell中引用整个命令行相同:
“flatc--cpp--gen mutable…”
-shell将整个字符串解释为命令名,如果
没有这样的文件或目录,则会失败。
。嗨!虽然我同意你指出的问题是类似的,但我个人认为这并不能解决我的问题。我确实看到过那个帖子,但它并没有回答我的。。。问题?出于某种原因,当我执行时:
EXECUTE\u进程(命令flatc--cpp--gen mutable-o${META\u INSTALL\u LOCATION}${FLATBUFFER\u SRC\u STR})
它仍然将
${FLATBUFFER\u SRC\u STR}
作为一个参数。。。你能帮我一下吗?我无法理解如何告诉CMake将此列表解压缩为args。啊,而且flatc确实知道有一个arg,他无法解析(这个信息可能会有帮助)。泰!您可以从
文件(GLOB)
获取
FLATBUFFER\u SRC
。在
FLATC\u命令
变量的设置中使用此变量,不进行任何替换(删除
STRING(REPLACE)
行)并引用:
SET(FLATC\u命令FLATC--cpp--gen mutable--o${META u安装位置}${FLATBUFFER\u SRC})
。从您的评论中,我理解“核心”问题,因此我更新了标题以反映它。虽然这个“核心”问题与重复问题密切相关,但我认为它值得单独提问/回答。我没有发现关于堆栈溢出的相同(更新!)问题的问题,所以我重新打开了这个问题。非常直截了当,我忽略了列表中的事实。我真的很感谢你的帮助!
FILE( GLOB_RECURSE FLATBUFFER_SRC "*.fbs" )

EXECUTE_PROCESS(
        COMMAND flatc --cpp --gen-mutable -o ${META_INSTALL_LOCATION} ${FLATBUFFER_SRC}
        RESULT_VARIABLE OUT
)