2017-11-23 4 views
0

CMake에서 C 테스트 프로그램을 빌드해야하지만 실행할 수 없다는 것을 어떻게 표시합니까?CMake가 테스트를 빌드하고 실행하도록하는 방법

날씨, 기후 및 우주 과학자가 사용하는 무료 소프트웨어 과학 데이터 패키지 인 netCDF C 라이브러리의 경우 CMake와 autotools 빌드가 있습니다. 이 코드는 github에 있습니다. 거기에 CMake 파일을 볼 수 있습니다.

테스트에는 쉘 스크립트와 일부 C 프로그램이 있습니다. 이 경우, C 테스트가 실행되기 전에 완료 할 쉘 스크립트 조치가 필요합니다. 이 모든 것이 병렬 빌드에서 작동하기를 원하기 때문에, 가장 쉬운 해결책은 셸 프로그램이 C 테스트 프로그램을 호출해야 할 때 호출하고 테스트 중에 C 테스트 프로그램을 호출하지 않는 것 같습니다.

예를 들어, 테스트 프로그램 tst_interops3.c (디렉토리 nc_test4)가 있습니다. 쉘 스크립트 테스트 run_get_hdf4_files.sh도 있습니다. 여기있다 :

#!/bin/sh 

# This shell gets files from the netCDF ftp site for testing. 

# $Id: run_get_hdf4_files.sh,v 1.4 2009/07/15 15:16:05 ed Exp $ 

set -e 
echo "" 
file_list="AMSR_E_L2_Rain_V10_200905312326_A.hdf AMSR_E_L3_DailyLand_V06_20020619.hdf \ 
    MYD29.A2009152.0000.005.2009153124331.hdf MYD29.A2002185.0000.005.2007160150627.hdf \ 
    MOD29.A2000055.0005.005.2006267200024.hdf" 
echo "Getting HDF4 test files $file_list" 

for f1 in $file_list 
do 
    if ! test -f $f1; then 
    curl -O "ftp://ftp.unidata.ucar.edu/pub/netcdf/sample_data/hdf4/$f1.gz" 
    gunzip $f1.gz 
    fi 
done 

${execdir}/tst_interops3 

echo "SUCCESS!!!" 

exit 0 

이 스크립트는 일부 데이터 파일을 다운로드 한 다음 netCDF의이 HDF4 데이터 파일을 읽을 수 있도록 데이터 파일을 읽는 프로그램 tst_interops3을 실행합니다. (HDF4는 기존 과학 데이터 형식입니다).

autotools에서 나는 check_PROGRAMS에 tst_interops3를 나열하지만 TESTS에는 나열하지 않습니다. 이로 인해 빌드되고 실행되지 않습니다. (그것은 스크립트에서 실행됩니다.)

그러나, 나는 CMake에서 같은 일을하는 방법을 알아낼 수 없습니다. 테스트 프로그램을 빌드하고 실행하려면 어떻게합니까?

+0

이미 cmake로 무엇을 보여주십시오과 :

그래서 당신은 "확인"수동 대상으로 정의하고,이 단계에서 구축하고자 (실행 파일처럼) 모든 대상에서 그것을 따라 설정할 수 있습니다 우리는 픽스를 더 잘 지적 할 수있을 것입니다. –

답변

0

미리 정의 된 "확인"대상이 CMake에 없습니다. CMake와 함께 사용되는 대부분의 테스트 인프라는 "테스트"의사 타겟을 정의하지만 "검사"는 정의하지 않습니다. 다음

# Add "check" target which simply executes "ctest" for perform testing. 
add_custom_target(check COMMAND "ctest") 

# Create an executable which is needed only for testing. 
# It *won't* be built on "make all" or "make". 
add_executable(test_program_a EXCLUDE_FROM_ALL test_program_a.c) 

# Mark the executable to be built on "make check". 
add_dependencies(check test_program_a) 

# Create some test which involves the executable created above. 
# This test is executed on "ctest" (or "make test"). 
# So it will be executed on "make check" too, after building the test program. 
add_test(NAME test.01 COMMAND test_program_a "val1") 
+0

"check"타겟을 실제로 정의하고 싶지는 않습니다. 이미 "테스트"대상이 있습니다. 사용자가 "테스트"를 수행하지만 실행되지 않으면 내 프로그램을 빌드하고 싶습니다. 프로그램은 스크립트에 의해 실행됩니다. -하지만 당신의 대답을 주셔서 감사합니다, 나는 그것이 내가 일하는 데 필요한 것을 포함한다고 생각합니다. –

+1

테스트를 제외하고 "테스트"대상에 "종속"대상을 첨부 (종속성 추가) 할 수 없습니다. – Tsyvarev