2017-11-23 16 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

私は実際に "チェック"ターゲットを定義したくありません。すでに「テスト」ターゲットがあります。ユーザーが「テストをする」が実行されたときにプログラムをビルドしたい。プログラムはスクリプトによって実行されます。 - しかし、あなたの答えをありがとう、私はそれが私の仕事を得るために必要なものが含まれていると思う。 –

+1

「擬似」ターゲットであるため、テスト以外の「テスト」ターゲットには、依存関係を付加することはできません(つまり、依存関係を追加することはできません)。 – Tsyvarev

関連する問題