2010-02-02 168 views
14

我想使用CMake来运行一些测试。其中一项测试应在所有匹配“fixtures/*。ext”的文件上调用验证脚本。如何将下面的伪CMake转换成真正的CMake?在CMake中循环匹配通配符的文件

i=0 
for file in fixtures/*.ext; do 
    ADD_TEST(validate_${i}, "validator", $file) 
    let "i=i+1" 
done 

回答

24

像这样:

file(GLOB files "fixtures/*.ext") 
foreach(file ${files}) 
    ... calculate ${i} to get the test name 
    add_test(validate_${i}, "validator", ${file}) 
endforeach() 

但是,这并不为你计算i。测试中有一个整数后缀是否很重要?否则,您可以使用file(...)来提取文件名(不带扩展名)以供使用。

5

您需要enable_testing才能激活CMake的测试机器。 add_test函数需要测试的名称和要运行的命令,其语法如下所示。

要添加计数器,您可以使用math()函数。通过指定输入的完整路径,以下内容可以让您用完源代码版本。

cmake_minimum_required(VERSION 2.6) 
enable_testing() 

file(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/fixtures/*.ext") 
set(validator ${CMAKE_CURRENT_SOURCE_DIR}/validator) 
set(i 0) 
foreach(filename ${files}) 
    add_test(NAME "validate_${i}" 
     COMMAND "${validator}" ${filename}) 
    math(EXPR i "${i} + 1") 
endforeach()