微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cmake生成目录存储在ramdisk中并符号链接到项目导致make失败

如何解决cmake生成目录存储在ramdisk中并符号链接到项目导致make失败

我正在尝试使用ramdisk作为构建目录来加快构建过程。

我已经创建了虚拟磁盘:

sudo mount -t tmpfs -o size=1024m tmpfs /mnt/ramdisk

在ramdisk上,我创建了构建目录:

mkdir -p /mnt/ramdisk/rust/hello3/build/

然后我将ramdisk构建目录符号链接到要在其中使用此目录的项目:

cd /home/wakatana/rust/hello3
ln -s /mnt/ramdisk/rust/hello3/build/ build

之后,我做了经典的组合来建造项目:

cd /home/wakatana/rust/hello3/build
cmake ..
make

但是上述命令不起作用,因为相对路径(cmake ..)转换为/mnt/ramdisk/rust/hello3而不是/home/wakatana/rust/hello3/(我怀疑这是整个问题)

因此,我做了一些修改后的组合,而不是经典的组合(当未将build dir符号链接时起作用):

cd /home/wakatana/rust/hello3/build
cmake /home/wakatana/rust/hello3
make

但这最终会在make阶段出现错误

-- Configuring done
-- Generating done
-- Build files have been written to: /home/wakatana/rust/hello3/build
make[2]: *** No rule to make target '../src/lib.rs',needed by 'src/x86_64-unkNown-linux-gnu/debug/libtest_lib.a'.  Stop.
CMakeFiles/Makefile2:122: recipe for target 'src/CMakeFiles/test-lib_target.dir/all' Failed
make[1]: *** [src/CMakeFiles/test-lib_target.dir/all] Error 2
Makefile:83: recipe for target 'all' Failed
make: *** [all] Error 2

是否可以通过某种方式告诉cmake / make处理正确的符号链接

解决方法

省去创建符号链接并在ram光盘上工作的麻烦:

cmake -S /home/wakatana/rust/hello3 -B /mnt/ramdisk/rust/hello3/build/
cmake --build /mnt/ramdisk/rust/hello3/build/

您可以创建符号链接,然后从父目录工作:

ln -s /mnt/ramdisk/rust/hello3/build/
cd /home/wakatana/rust/hello3 
cmake -S .  -B build
cmake --build build
# or expand the symlink before cmake has to:
cmake -S .  -B "$(readlink -f "./build")"
cmake --build "$(readlink -f "./build")"
,

另一种方法是将RAM磁盘重新绑定到项目树中,而不是符号链接:

$ cd /home/wakatana/rust/hello3
$ mkdir -p build
$ mount --bind /mnt/ramdisk/rust/hello3/build build

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。