您可以通过制作您自己的带有附加定义的 lit.cfg 脚本来做您想做的事。例如,我为我的项目ELLCC的不同目标交叉构建东西。我使用 QEMU 运行测试。我修改后的 lit.site.cfg 的一部分看起来像:
config.substitutions.append( ('%microblazeecc', ' ' + config.ecc + ' ' +
'-target microblaze-ellcc-linux ') )
config.substitutions.append( ('%microblazeexx', ' ' + config.ecc + '++ ' +
'-target microblaze-ellcc-linux ') )
config.substitutions.append( ('%microblazerun', ' ' + ellcc + '/bin/qemu-microblaze ') )
一个典型的测试用例如下所示:
// Compile and run for every target.
// RUN: %armexx -o %t %s && %armrun %t | FileCheck -check-prefix=CHECK %s
// RUN: %armebexx -o %t %s && %armebrun %t | FileCheck -check-prefix=CHECK %s
// RUN: %i386exx -o %t %s && %i386run %t | FileCheck -check-prefix=CHECK %s
// RUN: %microblazeexx -o %t %s && %microblazerun %t | FileCheck -check-prefix=CHECK %s
// RUN: %mipsexx -o %t %s && %mipsrun %t | FileCheck -check-prefix=CHECK %s
// RUN: %mipselexx -o %t %s && %mipselrun %t | FileCheck -check-prefix=CHECK %s
// RUN: %ppcexx -o %t %s && %ppcrun %t | FileCheck -check-prefix=CHECK %s
// FAIL: %ppc64exx -o %t %s && %ppc64run %t | FileCheck -check-prefix=CHECK %s
// RUN: %x86_64exx -o %t %s && %x86_64run %t | FileCheck -check-prefix=CHECK %s
// CHECK: foo.i = 10
// CHECK: bye
#include <cstdio>
class Foo {
int i;
public:
Foo(int i) : i(i) { }
int get() { return i; }
~Foo() { printf("bye\n"); }
};
int main(int argc, char** argv)
{
Foo foo(10);
printf("foo.i = %d\n", foo.get());
}
您可以使用 FileCheck 来查找您感兴趣的输出。