C++ Bazel:本地访问附近的文件
我想从cc文件读取附近的文件。我已经插入了C++ Bazel:本地访问附近的文件,c++,bazel,C++,Bazel,我想从cc文件读取附近的文件。我已经插入了data属性,但似乎在附近找不到data.txt 结构: ├── root │ ├── BUILD │ ├── data.txt │ └── main.cc └── WORKSPACE 在生成文件中: cc_binary( name = "test", srcs = ["main.cc"], data = ["data.txt"] ) 在main.cc文件中: #include <iostream> #include<f
data
属性,但似乎在附近找不到data.txt
结构:
├── root
│ ├── BUILD
│ ├── data.txt
│ └── main.cc
└── WORKSPACE
在生成文件中:
cc_binary(
name = "test",
srcs = ["main.cc"],
data = ["data.txt"]
)
在main.cc文件中:
#include <iostream>
#include<fstream>
using namespace std;
int main(){
ifstream myReadFile;
myReadFile.open("data.txt");
if (!myReadFile.good()){
cout << "FILE not good!" << endl;
return 1;
}
cout << "FILE is good!" << endl;
return 0;
}
#包括
#包括
使用名称空间std;
int main(){
ifstreammyreadfile;
myReadFile.open(“data.txt”);
如果(!myReadFile.good()){
cout假设您是从顶级目录(包含工作区的目录,使用bazel build root:test
)生成的,并且您使用bazel bin/root/test
运行代码,则该文件应指定为root/data.txt
假设您是从顶级目录生成的(包含WORKSPACE
的目录,使用bazel build root:test
,并使用bazel bin/root/test
运行代码,该文件应指定为root/data.txt
您是对的。但是,应该有一种方法以包相关的方式访问文件。子项目不一定知道整个项目结构。我知道;但是bazel不是一个包管理工具,它是一个构建工具。大概,在您构建了所有内容之后,您会将这些文件移动到它们的最终目的地,这就是您的代码应该从中访问它们的地方。data
参数的正常用例是用于测试的,您希望在其中指定一些测试f当您使用bazel TEST
或类似的工具运行测试时,您可以从TEST_DATA_DIR环境变量获取顶级目录(查看文档).你是对的。但是,应该有一种以包相关的方式访问文件的方法。子项目不一定知道整个项目结构。我知道;但是bazel不是一个包管理工具,它是一个构建工具。大概,在构建完所有内容之后,你会将这些文件移动到它们的最终目标,而这就是你的代码所在应该从中访问它们。数据
参数的正常使用情况是用于测试,您希望在其中指定一些测试文件,并且当您使用bazel test
或类似工具运行测试时,您可以从test_data_DIR环境变量中获取顶级目录(查看文档)。