如何使用 MATRIX_EVAL 启用基于编译器的构建矩阵行?
How to use MATRIX_EVAL to enable a build matrix row based on a compiler?
我们的 Travis build matrix 包含使用未定义行为消毒剂构建的行:
matrix:
- BUILD_MODE="all"
- BUILD_MODE="no-asm"
- BUILD_MODE="asan"
- BUILD_MODE="ubsan"
GCC 要求 UBsan 为 4.9(或可能是 5.0),这导致我们的测试在 Trusty 上失败:
...
$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
...
g++ -DNDEBUG -g2 -O2 -fPIC -march=native -pipe -fsanitize=undefined -DCRYPTOPP_COVERAGE -c cryptlib.cpp
g++: error: unrecognized command line option ‘-fsanitize=undefined’
make: *** [cryptlib.o] Error 1
The command "make "$BUILD_MODE" && ./cryptest.exe v && ./cryptest.exe tv all" exited with 2.
Travis 有一个叫做 MATRIX_EVAL
的东西,看起来像某种选择器。我认为它可以用于启用或禁用构建矩阵中的一行,但我不清楚如何使用它。该文档位于 Travis 文档中的 add documentation for upgrading gcc and clang, but its not explained well. Also see Building a C Project。
当 GCC 为 4.9 或更高版本时,我们如何使用 MATRIX_EVAL
启用 UBsan 行?或者,如果 MATRIX_EVAL
是错误的工具,那么我们如何告诉 Travis 在 GCC 为 4.9 或更高版本时启用构建?
好吧,这很尴尬。我是将 PR 写入文档的人 - 由于对合并 PR 的评论而偶然发现了这一点。
MATRIX_EVAL
在此上下文中只是一个环境变量 - 请注意,它在每个 matrix.include
的 env
中指定。在 linked documentation 的上下文中,每个构建矩阵条目共有的 before_install
步骤仅运行 eval "${MATRIX_EVAL}"
.
也就是说,MATRIX_EVAL
没什么特别的。这只是在 Travis 构建矩阵条目中定义条件行为的一种方式。从您链接的 .travis.yml
文件中,解决方案只是在 script
步骤中添加一个 shell 以 BUILD_MODE
为条件的脚本。
我们的 Travis build matrix 包含使用未定义行为消毒剂构建的行:
matrix:
- BUILD_MODE="all"
- BUILD_MODE="no-asm"
- BUILD_MODE="asan"
- BUILD_MODE="ubsan"
GCC 要求 UBsan 为 4.9(或可能是 5.0),这导致我们的测试在 Trusty 上失败:
...
$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
...
g++ -DNDEBUG -g2 -O2 -fPIC -march=native -pipe -fsanitize=undefined -DCRYPTOPP_COVERAGE -c cryptlib.cpp
g++: error: unrecognized command line option ‘-fsanitize=undefined’
make: *** [cryptlib.o] Error 1
The command "make "$BUILD_MODE" && ./cryptest.exe v && ./cryptest.exe tv all" exited with 2.
Travis 有一个叫做 MATRIX_EVAL
的东西,看起来像某种选择器。我认为它可以用于启用或禁用构建矩阵中的一行,但我不清楚如何使用它。该文档位于 Travis 文档中的 add documentation for upgrading gcc and clang, but its not explained well. Also see Building a C Project。
当 GCC 为 4.9 或更高版本时,我们如何使用 MATRIX_EVAL
启用 UBsan 行?或者,如果 MATRIX_EVAL
是错误的工具,那么我们如何告诉 Travis 在 GCC 为 4.9 或更高版本时启用构建?
好吧,这很尴尬。我是将 PR 写入文档的人 - 由于对合并 PR 的评论而偶然发现了这一点。
MATRIX_EVAL
在此上下文中只是一个环境变量 - 请注意,它在每个 matrix.include
的 env
中指定。在 linked documentation 的上下文中,每个构建矩阵条目共有的 before_install
步骤仅运行 eval "${MATRIX_EVAL}"
.
也就是说,MATRIX_EVAL
没什么特别的。这只是在 Travis 构建矩阵条目中定义条件行为的一种方式。从您链接的 .travis.yml
文件中,解决方案只是在 script
步骤中添加一个 shell 以 BUILD_MODE
为条件的脚本。