我正在尝试与How to create a static string at compile time几乎相同。
use std::{env};
use std::path::Path;
use std::io::{Write, BufWriter};
use std::fs::File;
fn main() {
let out_dir = env::var("OUT_DIR").unwrap();
let dest_path = Path::new(&out_dir).join("file_path.txt");
let mut f = BufWriter::new(File::create(&dest_path).unwrap());
let long_string = dest_path.display();
write!(f, "{}", long_string).unwrap();
}
fn main() {
static LONG_STRING: &'static str = include_str!("file_path.txt");
println!("{}", LONG_STRING);
}
cargo build
我收到错误:
error: couldn't read src\file_path.txt: The system cannot find the file specified. (os error 2)
--> src\main.rs:3:40
|
3 | static LONG_STRING: &'static str = include_str!("file_path.txt");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
我可以看到该文件是在
生成的X:\source\github\rust-build-script-example\target\debug\build\rust-build-script-example-f2a03ef7abfd6b23\out\file_path.txt
file_path.txt
输出到src
目录?include_str!
上面目录中生成的文件而不在代码中对其进行硬编码(因为路径中似乎有一个随机生成的部分rust-build-script-example-f2a03ef7abfd6b23
) 答案 0 :(得分:3)
诀窍是
concat!(env!("OUT_DIR"), "/file_path.txt")
我改变了我的主要内容如下,它起作用了。
fn main() {
static LONG_STRING: &'static str = include_str!(concat!(env!("OUT_DIR"), "/file_path.txt"));
println!("{}", LONG_STRING);
}
以下crates.io文档帮助
答案 1 :(得分:0)
如果有人对更方便的方法感兴趣,我还创建了build_script_file_gen crate,可以按如下方式使用
extern crate build_script_file_gen;
use build_script_file_gen::gen_file_str;
fn main() {
let file_content = "Hello World!";
gen_file_str("hello.txt", &file_content);
}
#[macro_use]
extern crate build_script_file_gen;
fn main() {
println!(include_file_str!("hello.txt"));
}