CLion构建Tensorflow源码工程

环境配置

使用2018.3版本的Clion及其Bazel插件, 更新版本的Bazel插件官宣不再支持Clion, 实测无法生成bazel文件。此外,bazel的版本也需要注意一下,目前Bazel迭代频繁且向后兼容性很差,由此导致了Tensorflow源码的版本和Bazel版本的强耦合,以及Bazel插件和Bazel版本的强耦合并间接和Tensorflow源码版本耦合在一起。
笔者使用的是Tensorflow 1.14的代码,对应bazel 0.24.1,bazel插件支持0.23.0以上bazel,二者不冲突。但如果使用TF 1.13版本,要求bazel 0.21.0,就和bazel插件支持的bazel版本有冲突,导致报错:

那如何解决这个问题呢?毕竟IDE可以不更新,源码总不能一直维持1.14吧,毕竟2.0已经在如火如荼的迭代中了。
我们知道:
1. 构建工程生成的.clwb目录如果不进行(也不该进行) git add,就会一直留在源码目录中,不会随着分支切换被清空。
2. 工程构建完毕之后,相关的文件也是以符号链接的形式添加到源码目录,而符号链接默认也不会随着工程分支的切换发生变化。
3. 切换分支会引起Clion更新符号索引,但不会完全重建工程。
由此,就有个取巧的办法:先使用TF1.14构建源码工程,再用git切换到其他版本更新索引,亲测有效。

构建工程

1.Import bazel project, .clwb里会存相应的符号信息. 此时可以通过编辑以下文件控制实际生成的目标, 此外, 还可以在Bazel build的过程中open project view来控制. 笔者这边希望生成全部符号的关系, 所以使用了默认的”all”

2. 工程目录下执行 ./configure 配置, 生成的.bazelrc文件用来保证bazel命令顺利执行

3. Bazel->Build->Compile Project, 执行编译, 编译时为了获得符号关系, 会把所有Target都编译一遍, 生成符号间关系, 即便环境不允许, 部分失败也没关系。这个过程耗时约1~2h,期间会大量从外网拉包,所以,嗯,要科学。

4. Bazel->Sync->Sync Project with Build Files, 将符号关系保存到数据库.

2 comments on “CLion构建Tensorflow源码工程

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Discover more from sketch2sky

Subscribe now to keep reading and get access to the full archive.

Continue reading