- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 execute_process
的子目录中执行 CMake 命令,并将一些缓存变量作为 -D
传递选项。
如果变量是字符串类型,它就可以工作。但是,如果变量是列表,则 typical method在命令行中传递列表似乎不起作用。
我尝试了该答案中列出的所有组合。我什至尝试加入 mylist
与 "\\;"
或 "\\\\;"
.然而,execute_process
似乎总是打开 '-DVal2=a\\;b\\;c\\;'
或 '-DVal2=a;b;c'
至 -Dval2=a b c
.
我怎样才能防止这种情况?只有 -DVal2=a\\;b\\;c
有效,但很烦人。
set(
mylist
a
b
c
)
set(
cmake_args
"-DVal1=abc"
"'-DVal2=${mylist}'" #does not work, the execute_process will unpack it into seperated args
)
execute_process(
COMMAND ${CMAKE_COMMAND} ${cmake_args} ${CMAKE_SOURCE_DIR}/subproject
OUTPUT_FILE ${CMAKE_BINARY_DIR}/config.log
ERROR_FILE ${CMAKE_BINARY_DIR}/config.log
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/subproject
RESULT_VARIABLE config_result
)
最佳答案
在传递列表之前,在其上运行以下行:
string(REPLACE ";" "\\;" escaped_list "${my_list}")
set(my_list "a\;b" "c" "d")
string(REPLACE ";" "\\;" escaped_list "${my_list}")
execute_process(COMMAND ${CMAKE_COMMAND} -Dmy_list=${escaped_list} -P test.cmake)
cmake_args
的情况。并通过。
# Construction.
set(my_list "a\;b" "c" "d")
set(other_list "e" "f\;g" "h")
# For debugging purposes.
message("my_list = \"${my_list}\".")
foreach(arg ${my_list})
message("-> ${arg}")
endforeach()
message("other_list = \"${other_list}\".")
foreach(arg ${other_list})
message("-> ${arg}")
endforeach()
# Encoding.
string(REPLACE ";" "\\;" escaped_list "${my_list}")
message("escaped_list = \"${escaped_list}\".")
string(REPLACE ";" "\\;" other_escaped_list "${other_list}")
message("other_escaped_list = \"${other_escaped_list}\".")
set(cmake_args "-Dother_list=${other_escaped_list}" "-Dmy_list=${escaped_list}")
execute_process(
COMMAND
${CMAKE_COMMAND} ${cmake_args} -P test2.cmake
)
# For debugging purpose.
message("my_list = \"${my_list}\".")
foreach(arg ${my_list})
message("-> ${arg}")
endforeach()
message("other_list = \"${other_list}\".")
foreach(arg ${other_list})
message("-> ${arg}")
endforeach()
cmake -P test1.cmake
:
my_list = "a\;b;c;d".
-> a;b
-> c
-> d
other_list = "e;f\;g;h".
-> e
-> f;g
-> h
escaped_list = "a\\;b\;c\;d".
other_escaped_list = "e\;f\\;g\;h".
my_list = "a\;b;c;d".
-> a;b
-> c
-> d
other_list = "e;f\;g;h".
-> e
-> f;g
-> h
关于cmake - 如何在 CMake 的 execute_process 中传递列表变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52206191/
我有一个项目,我正在使用 cmake 来帮助构建。假设项目在 /home/proj 中,构建目录在 /home/proj-build /home/proj 目录是一个带有一些标签的 git 存储库,我
我有一个 CMake 脚本,它创建一个命令字符串并使用 execute_process 运行它。但是,有些参数没有正确填写。有没有办法打印正在执行的实际命令字符串? 它上面有一个 message 调用
我正在运行一些耗时的 bash 脚本: execute_process( COMMAND "bash" "slow_script.sh" WORKING_DIRECTORY ${INS
我最近在使用 cmake 时遇到了一个非常有趣的问题。问题如下: 我有一个 CMakeLists.txt,它定义了一个相当简单的项目。我希望能够在构建项目时设置一个 linux 环境变量。为此,我想调
我有一个使用 CMake 的项目,我通过以下方式获取当前的 git 哈希: if(EXISTS "${CMAKE_SOURCE_DIR}/.git") execute_process(
我有以下在 WORKING_DIRECTORY 中运行 COMMAND 的 CMake 片段。我尝试了不同的方法来传递环境变量 (MBEDTLS_INCLUDE_DIR=${CMAKE_CURRENT
我想在 execute_process 的子目录中执行 CMake 命令,并将一些缓存变量作为 -D 传递选项。 如果变量是字符串类型,它就可以工作。但是,如果变量是列表,则 typical meth
在Linux计算机上,从cmake项目中,我试图使用execute_process调用git,以便可以将源代码控制中的信息包含到我的应用程序中。 我创建了一个小测试来尝试打印git版本: cmake_
CMake的execute_process command 似乎只让您执行一个进程 - 而不是您可以提供命令 shell 的任意行。问题是,我想使用管道、文件描述符重定向等 - 而这似乎是不可能的。另
我目前对 CMake 感到精神崩溃。首先让我向您展示一下我在做什么: FILE( GLOB_RECURSE FLATBUFFER_SRC "*.fbs" ) STRING( REPLACE ";" "
我使用 CMake install(DIRECTORIES...) 形式在安装时复制 header : install(DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}
问题描述 我在设置执行 MSYS2 bash 命令的 CMake external_process() 命令时遇到问题。当我在 MSYS2 shell 中时,如果我运行命令 $ bash -v ./b
我想调用命令 find来自 execute_process . find 命令的格式是: find [/v] [/c] [/n] [/i] [/off[line]] "" [[:][][...]] 因
我在 cmake 中使用 execute_process() 函数。 message(" FLAGS = ${FLAGS}") message(" SCATTERFILE = ${SCATTERFIL
我是一名优秀的程序员,十分优秀!