KDevelop で automake ベースのプロジェクトにカスタム ビルド ステップを追加するにはどうすればよいですか?
-
01-07-2019 - |
質問
私は最近、C++ と KDevelop を使用した個人的なコーディング プロジェクトに取り組み始めました。私は単にハッキングすることから始めましたが、さらに先に進む前に適切な単体テスト スイートをセットアップした方が長期的には良くなると考えています。サブプロジェクトとして別個のテストランナー実行可能ファイルを作成しました。それに追加したテストは適切に機能しているようです。ここまでは成功です。
ただし、単体テストを明示的に実行するときだけでなく、ビルドするたびに単体テストを実行したいと思っています。これは、私が作った混乱をコンビニエンス ライブラリに分割する場合に特に当てはまります。各ライブラリにはおそらく独自のテスト実行可能ファイルが含まれます。これらをすべて手動で実行するのではなく、ビルド プロセスの最終ステップとして実行したいと考えています。プロジェクト メニューと automake マネージャーのオプションをすべて調べましたが、これを設定する方法がわかりません。
これはおそらくメイクファイルを手動で編集することで実行できると思います。残念ながら、私の makefile-fu は少し弱いです。また、次に IDE を通じて何かを変更するときに、手動で行った変更が KDevelop によって上書きされるのではないかと心配しています。したがって、KDevelop 自体を通じてこれを行う方法に関するオプションがある場合は、その方法を選択したいと思います。
ビルド プロセスの一部として KDevelop にテスト実行可能ファイルを実行させる方法を知っている人はいますか?ありがとう!
(私は KDevelop と 100% 結びついているわけではありません。KDevelop でこれができない場合、またはこれをはるかに簡単にする IDE がある場合は、納得して切り替えることができます。)
解決
あなたですが できた デフォルトの `make`ターゲットを操作してテストを実行しますが、通常は推奨されません。
make
すべてのテストを実行します。代わりに「チェック」ターゲットを使用する必要があります。これは、ソフトウェアパッケージの中で受け入れられている準標準です。それを行うことにより、テストは実行時にのみ開始されます
make check
その後、「Make」だけでなく「Make Check」を実行するようにKdevelopを簡単に構成できます。
(kdevelopを介して)Automakeを使用しているため、「チェック」ターゲットを自分で書く必要はありません。代わりに、「Makefile.am」を編集していくつかの変数を設定するだけです。
TESTS = ...
ぜひご覧ください。automake ドキュメント「テスト スイートのサポート」詳細については。
他のヒント
私はこの方法でそれを機能させました:
$ cat src/base64.c
//code to be tested
int encode64(...) { ... }
#ifdef UNITTEST
#include <assert.h>
int main(int argc, char* argv[])
{
assert( encode64(...) == 0 );
return 0;
}
#endif //UNITTEST
/* end file.c */
$ cat src/Makefile.am
...
check_PROGRAMS = base64-test
base64_test_SOURCES = base64.c
base64_test_CPPFLAGS = -I../include -DUNITTEST
TESTS = base64-test
あ 小切手をする src/base64-test をビルドして実行します。
$ make check
...
PASS: base64-test
==================
All 1 tests passed
==================
...
今、私はそれをすべて m4 マクロとしてカプセル化し、次のように使用しようとしています。
MAKE_UNITTEST(base64.c)
これにより、上記の解決策のようなものが生成されるはずです。
お役に立てれば。