使用过CMake之后,我已经习惯了使用CMake鼓励的源外构建。如何使用Cargo完成源外构建?
再次使用in-source-builds感觉就像倒退了一步:
Cargo.lock
和target/
,更糟糕的是,递归地展示其内容。*.rs
目录中添加target
文件作为构建间接deps的一部分,因此对所有*.rs
文件进行操作可能会意外地拾取其他文件它们不在隐藏目录中,因此即使配置了开发工具也不会被忽略。虽然可以解决所有这些问题,但我宁愿只有一个外部构建路径并保持源目录的原始状态。
答案 0 :(得分:9)
您可以通过configuration file (key build.target-dir
)或environment variable (CARGO_TARGET_DIR
)指定target/
文件夹的目录。以下是使用配置文件的示例:
假设您想要一个目录~/work/
,您希望在其中保存货物项目(~/work/foo/
),并在其旁边显示目标目录(~/work/my-target/
)。
$ cd ~/work
$ cargo new --bin foo
$ mkdir .cargo
$ $EDITOR .cargo/config
然后将以下内容插入配置文件中:
[build]
target-dir = "./my-target"
如果您构建了正常的货物项目目录:
$ cd foo
$ cargo build
您会注意到没有target/
目录,但所有内容都在~/work/my-target/
。
但是,Cargo.lock
仍保存在Cargo项目目录中,但这有点意义。 For executables, you should check the Cargo.lock
file into your git! For libraries, you shouldn't。我想不得不忽略一个文件比忽略整个文件夹更好。
最后,更改target-dir有一些注意事项,列出in the PR which introduced the feature。
答案 1 :(得分:0)
虽然有用手动设置它并不是那么方便,但我希望能够在源代码树中构建多个包,所有这些包都是源外的,d = {'date':['1/15/2015','2/15/2015'], 'num':[1,2]}
s = {'split':['2/1/2015', '2/1/2016', '2/1/2014']}
df = pd.DataFrame(d)
sf = pd.DataFrame(s)
df['date'] = pd.to_datetime(df['date'])
sf['split'] = pd.to_datetime(sf['split'])
print (df)
date num
0 2015-01-15 1
1 2015-02-15 2
print (sf)
split
0 2015-02-01
1 2016-02-01
2 2014-02-01
配置选项不会没有实现。
使用环境变量I've written a small utility to wrap cargo,因此它会在源代码树的子目录中的顶层自动构建源外支持包。(
感谢Lukas指出mask = (sf.split <= df.date.max()) & (sf.split >= df.date.min())
print (mask)
0 True
1 False
2 False
Name: split, dtype: bool
sf = sf[mask]
print (sf)
split
0 2015-02-01
df = pd.concat([df, sf.rename(columns={'split':'date'})]).sort_values('date')
print (df)
date num
0 2015-01-15 1.0
0 2015-02-01 NaN
1 2015-02-15 2.0
和../target-dir
配置选项。