Testing 是否可以使用filecheck来匹配CMAKE项目中另一个文件的值?

Testing 是否可以使用filecheck来匹配CMAKE项目中另一个文件的值?,testing,automated-tests,tdd,llvm,Testing,Automated Tests,Tdd,Llvm,我正在处理一个LLVM过程,该过程在运行test.ll文件(在filecheck中由%s表示)时将json文件转储为其输出之一 下面是test.ll文件中的命令 ; RUN: opt-load %bindir/MY-PASS.so -json-filename output.json -run-my-pass %s -S -disable-output ; RUN: cat output.json | FileCheck %testdir/output-target.json 我的${PROJ

我正在处理一个LLVM过程,该过程在运行test.ll文件(在filecheck中由%s表示)时将json文件转储为其输出之一

下面是test.ll文件中的命令

; RUN: opt-load %bindir/MY-PASS.so -json-filename output.json -run-my-pass %s -S -disable-output
; RUN: cat output.json | FileCheck %testdir/output-target.json
我的
${PROJ_DIR}/Tests
文件夹有:

  • ${PROJ_DIR}/Tests/test.ll
    文件
  • ${PROJ_DIR}/Tests/output target.json
    文件
在${BUILD_DIR}文件夹上用CMAKE配置我的项目并运行
make check
后,我面临make check找不到output-target.json的问题

make check
能够在
${BUILD\u DIR}/Tests/
文件夹中生成
output.json
,但无法找到目标文件
%testdir/output target.json
,该文件扩展为
${BUILD\u DIR}/Tests/output/test.ll.tmpestdir/output target.json


我应该使用与
%testdir
不同的东西吗?

您可以使用
中预定义的lit
,更具体地说是
%p
以及
测试源根目录
(请参阅提供的相同URL)配置变量进行测试发现

因此,我通常最后要做的是为
cmake
configure\u file
命令提供
lit.cfg.in
模板,以便在build目录中获得
lit.cfg
,大致如下:

# aggregate unit test targets under a pseudo-target
add_custom_target(check)

configure_file("${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.in" "lit.cfg")

add_custom_target(lit_tests
COMMAND ${PYTHON_EXECUTABLE} -m lit.main "${CMAKE_CURRENT_BINARY_DIR}" -v)

add_dependencies(lit_tests ${TESTEE_LIB})
add_dependencies(check lit_tests)
这还允许我通过在build目录中键入
makecheck
来运行
lit
测试

然后在我的
lit.cfg.in
中添加以下内容:

config.test_source_root = '@CMAKE_CURRENT_SOURCE_DIR@'
config.substitutions.append(('%outputdatadir', "%p/data/output"))
所以在我的例子中,
%p
最终成为
[项目测试根目录的绝对路径]/data/output
,在这里我保留了测试用例的预期文本输出

最后,在一个特定的测试用例
.ll
文件中,我可以使用:

; RUN: diff -w %t %outputdatadir/output-target.json

或者类似的东西。

感谢您指出
%p
和替换链接。真的很有帮助。