2010-02-02 8 views
14

일부 테스트를 실행하기 위해 CMake를 사용하고 싶습니다. 테스트 중 하나는 "fixtures/*. ext"와 일치하는 모든 파일에서 유효성 검사기 스크립트를 호출해야합니다. 다음 pseudo-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

CMake의 테스트 장비를 활성화하려면 enable_testing이 필요합니다. 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() 
관련 문제