4

そこで、シミュレーションの単体テストを実行するために、bazel と googletest フレームワークを使用したいと考えています。このために、サンプル入力ファイルとサンプル出力ファイルが必要です。ソース ファイル、テスト ファイル、またはリポジトリ内の任意のファイルの絶対パスを取得したいので、そこから入力ファイルへの相対パスを作成できます。
例えば:

std::string path = __SOME_PATH_IN_REPO__+"/../inputfiles/input.txt";
std::fstream infile(path);

そのため、多くの検索を行った後、次のように bazel の BUILD ファイルから直接定数を定義できることがわかりました。

cc_test( 
    name = "gtest_capabilities", 
    srcs = [ 
        "testing/pwdTest.cpp", 
    ],          
    deps = [ 
        "@gtest//:main", 
    ],          
    copts = [ 
            "-D __ABSOLUTE_PATH__=$(workspace)", 
    ],          
) 

重要な行は、私が使用している copts にあります$(workspace)
私はここで、このようにcopts(または代わりに)を指定できることを読みましたdefinesが、これは機能します。最初のページがリンクしている
このページは、次のような環境変数を使用できることを教えてくれます: $(FOO)また、実行して利用可能なすべての環境変数を取得
できることも教えてくれます。bazel info --show_make_env

私がそれを実行すると、ワークスペースを含む環境変数の大きなリストが他の多くの隣に表示されます。
ここで問題が発生します。
しかし、$(workspace)変数を使用すると、bazel は $(workspace) が定義されていないことを教えてくれます。
$PWD 変数を使用できれば私もうまくいきますが、これもうまくいきませんでした。

誰かが私を助けてくれることを願っています。
ごきげんよう、
ロミオ

編集:
bazel ビルド ファイルで 'data' オプションを使用するようになりました。これは主に機能します

4

1 に答える 1

1

うーん、これはひどい出力です。基本的に、変数の出力と make 変数を--show_make_envまとめて、どちらがどちらであるかを示しません。bazel infomake 変数を見つけるには、出力を比較して非 make 情報を削除します。

$ bazel info --show_make_env > make-vars
$ bazel info > no-make-vars
$ diff make-vars no-make-vars
1,22d0
< ABI: local
< ABI_GLIBC_VERSION: local
< ANDROID_CPU: armeabi
< AR: /usr/bin/ar
< BINDIR: bazel-out/local-fastbuild/bin
< BINMODE: -dbg
< CC: /usr/bin/gcc
< CC_FLAGS: 
< COMPILATION_MODE: fastbuild
< CROSSTOOLTOP: external/local_config_cc
< C_COMPILER: compiler
< GENDIR: bazel-out/local-fastbuild/genfiles
< GLIBC_VERSION: local
< JAVA: external/local_jdk/bin/java
< JAVABASE: external/local_jdk
< JAVA_CPU: k8
< JAVA_TRANSLATIONS: 0
< NM: /usr/bin/nm
< OBJCOPY: /usr/bin/objcopy
< STACK_FRAME_UNLIMITED: 
< STRIP: /usr/bin/strip
< TARGET_CPU: k8

これらは利用可能な make 変数です。

-Da を使用してハードコーディングする代わりに、テストで PWD を見つけることができますか?

于 2016-07-07T15:18:40.437 に答える