added object suffix option
This commit is contained in:
parent
ba48d09072
commit
e79e1a1e06
5 changed files with 21 additions and 10 deletions
|
@ -370,7 +370,7 @@ sources = [
|
|||
]
|
||||
```
|
||||
|
||||
An option `opts.comple_cmd_fmt` also exists. Its default is `{compiler}
|
||||
An option `opts.compile_cmd_fmt` also exists. Its default is `{compiler}
|
||||
{compiler_flags} -MD -MF {depfile} -o {object} -c {source}`. Note that if you
|
||||
remove the `-MD -MF {depfile}` component, ninja will have no way to discover
|
||||
what header files your source file depends on.
|
||||
|
|
|
@ -125,8 +125,14 @@ build $builddir/{name}/dep: mkdir
|
|||
|
||||
for source in &target.sources {
|
||||
let new_file = source.replace('/', "-");
|
||||
let obj_name = format!("$builddir/{}/obj/{}.o", name, new_file);
|
||||
let dep_name = format!("$builddir/{}/dep/{}.o.d", name, new_file);
|
||||
let obj_name = format!(
|
||||
"$builddir/{}/obj/{}{}",
|
||||
name, new_file, target.opts.object_suffix
|
||||
);
|
||||
let dep_name = format!(
|
||||
"$builddir/{}/dep/{}{}.d",
|
||||
name, new_file, target.opts.object_suffix
|
||||
);
|
||||
ret.push_str(&format!(
|
||||
"build {}: cc_{} {}\n dep = {}\n",
|
||||
obj_name, name, source, dep_name
|
||||
|
|
|
@ -23,6 +23,7 @@ pub struct DeserTargetOptions {
|
|||
pub default: Option<bool>,
|
||||
pub compile_cmd_fmt: Option<String>,
|
||||
pub link_cmd_fmt: Option<String>,
|
||||
pub object_suffix: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Deserialize)]
|
||||
|
|
|
@ -24,13 +24,13 @@ impl<'a> Target<'a> {
|
|||
ret.opts = opts.clone();
|
||||
|
||||
if let Some(parent) = parent {
|
||||
if let None = deser.outfile {
|
||||
if deser.outfile.is_none() {
|
||||
ret.outfile = parent.outfile;
|
||||
}
|
||||
if let None = deser.compiler {
|
||||
if deser.compiler.is_none() {
|
||||
ret.compiler = parent.compiler;
|
||||
}
|
||||
if let None = deser.linker {
|
||||
if deser.linker.is_none() {
|
||||
ret.linker = parent.linker;
|
||||
}
|
||||
for string in parent.compiler_flags.clone() {
|
||||
|
@ -60,11 +60,9 @@ impl<'a> Target<'a> {
|
|||
}
|
||||
if let Some(v) = &deser.linker {
|
||||
ret.linker = v;
|
||||
} else {
|
||||
if let Some(v) = &deser.compiler {
|
||||
} else if let Some(v) = &deser.compiler {
|
||||
ret.linker = v;
|
||||
}
|
||||
}
|
||||
if let Some(v) = &deser.linker_flags {
|
||||
for string in v {
|
||||
ret.linker_flags.push(string);
|
||||
|
|
|
@ -8,6 +8,7 @@ pub struct TargetOptions<'a> {
|
|||
pub depend_on: Vec<&'a str>,
|
||||
pub compile_cmd_fmt: &'a str,
|
||||
pub link_cmd_fmt: &'a str,
|
||||
pub object_suffix: &'a str,
|
||||
}
|
||||
|
||||
impl<'a> From<&'a DeserTargetOptions> for TargetOptions<'a> {
|
||||
|
@ -40,6 +41,10 @@ impl<'a> From<&'a DeserTargetOptions> for TargetOptions<'a> {
|
|||
ret.link_cmd_fmt = v;
|
||||
}
|
||||
|
||||
if let Some(v) = &value.object_suffix {
|
||||
ret.object_suffix = v;
|
||||
}
|
||||
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
@ -54,6 +59,7 @@ impl<'a> TargetOptions<'a> {
|
|||
compile_cmd_fmt:
|
||||
"{compiler} {compiler_flags} -MD -MF {depfile} -o {object} -c {source}",
|
||||
link_cmd_fmt: "{linker} {linker_flags} -o {outfile} {objects} {linker_libs}",
|
||||
object_suffix: ".o",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue