windows - 如何在 CMake 中使用分号值创建一个列表?
问题描述
我认为它应该是非常微不足道的,但似乎不受支持......在 CMake 中甚至有可能让列表的一个值包含分号吗?
原因非常简单——因为我在 Windows 上运行,而在 Windows 上,分号是一个环境变量(即PATH
)中两个或多个文件夹之间的分隔符。
list(
APPEND
MY_TEST_ENVIRONMENT
"MY_FLAG=1"
)
# <...>
list(
APPEND
MY_TEST_ENVIRONMENT
"PATH=first_folder_path;second_folder_path"
# ^--- here is the problem
)
# <...>
set_property(TEST MyTests PROPERTY ENVIRONMENT ${MY_TEST_ENVIRONMENT})
我尝试删除和添加双引号,我尝试转义\;
,我尝试添加相同的环境变量两次 - 但这些都不起作用!
解决方案
通过用反斜杠转义分号,您走在了正确的轨道上。但是,在ENVIRONMENT
测试属性中设置列表时,这不是列表将被使用(并由 CMake 解释)的最后一个位置。然后该MY_TEST_ENVIRONMENT
列表用于填充CTestTestfile.cmake
,稍后由 CTest 读取以设置您的测试环境。
简而言之,您需要更多的转义字符来将分号传播到测试环境。具体来说,使用双反斜杠\\
将额外的反斜杠以及\;
转义的分号转义到列表中。这是 CMake 的转义字符文档供参考。总共应该使用三个反斜杠:
list(
APPEND
MY_TEST_ENVIRONMENT
"MY_FLAG=1"
)
# <...>
list(
APPEND
MY_TEST_ENVIRONMENT
"PATH=first_folder_path\\\;second_folder_path"
# ^--- Use three backslashes here
)
# <...>
set_property(TEST MyTests PROPERTY ENVIRONMENT ${MY_TEST_ENVIRONMENT})
推荐阅读
- javascript - 如何使用angular在html中绑定html标签
- javascript - IE + Chrome - 位置:固定子项的内容隐藏在位置:固定父项
- c - 为什么释放内存会导致分段错误?
- python - Sphinx 和 reStructuredText:在 include 指令中传递参数
- c# - 在 C# 中导出到 visio?
- jenkins - 隐藏输出 HTML 的 Active Choice 参数
- python - 使用 Tensorlow 2.0 实现 CNN 模型
- git - 使用 Git 在 Windows 和 Linux 上进行跨平台开发
- django - 重命名 Django 目录根 - ImportError: cannot import name 'python_implementation' from 'platform'
- linux - 无法打开 lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1'