4

私は C++ の宿題として long integers ライブラリに取り組んでおり、教師はそのインターフェイスの使用例として提供してくれました。このファイルの一部を次に示します。

void test_conversions() 
{ 
  int ordinary = 42; 
  lint long_int(ordinary); 
  long_int = ordinary; 

  ordinary = static_cast<int>(long_int); // ok 

  std::string s("-15"); 
  lint z(s); 

  z.to_string() == s; // this should be true
} 

void failed_conversions_test() 
{
  int ordinary = 42; 
  std::string str = "-42"; 
  lint x = 5; 

  ordinary = x; // must be compilation error! 
  x = str; // must be compilation error! 
  str = x; // must be compilation error! 
}

ビルド プロセス中にこのファイルの互換性をテストしたいと考えています。ご覧のとおり、4 つのテストが必要です。1 つはコンパイルの成功 ( test_conversions) で、3 つは で示されている失敗のそれぞれですfailed_conversions_testint main()スタブを追加して を呼び出すことADD_TESTで、コンパイルの成功チェックを簡単に実装できますCMakeLists.txtが、CMake に残りの 3 つのテストをコンパイルして、コンパイルが失敗したことを確認するにはどうすればよいでしょうか?

「すべてのことを実行するカスタム スクリプトを実行する」のようなものを追加することを考えていましたが、これはコンパイラとプラットフォームに大きく依存し、良い方法とは思えません。

ありがとうございました。

4

1 に答える 1

5

コマンドはtry_compileあなたが探しているものかもしれません。

これを使用して、単一のソース ファイルをビルドし、結果を CMake に報告することができます。

try_compile(COMPILE_SUCCEEDED ${CMAKE_BINARY_DIR}/compile_tests my_test_src.cpp)

if(COMPILE_SUCCEEDED)
  message("Success!")
endif()

この機能の背後にある動機は、コンパイラ機能をテストすることだったので、ビルド時ではなく、CMake 構成時にのみ実行されます。それでも後者が必要な場合は、スクリプトを使用したカスタム ビルド ステップに頼る必要があります。

于 2013-11-06T09:29:31.743 に答える